Viewpager с динамической высотой не работает (всегда используйте высоту первого фрагмента)Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Viewpager с динамической высотой не работает (всегда используйте высоту первого фрагмента)

Сообщение Anonymous »

Я следил за этими и этими ответами, я также нашел эту ссылку.

Я использую эти ресурсы для проб и ошибок. Теперь мой пользовательский ViewPager успешно измеряет свое содержимое, но отображается только первое. К вашему сведению, мой ViewPager содержит некоторые сложные представления, такие как ExpendableListView, поэтому ни один код в этих ресурсах не работает идеально, мне нужно изменить код самостоятельно.
У меня есть 4 фрагмента (содержимого), поэтому я использую pager.setOffscreenPageLimit(3);

Это мой собственный ViewPager

Это мой собственный ViewPager

код> :

Код: Выделить всё

public class CustomViewPager extends ViewPager{

public CustomViewPager (Context context) {
super(context);
}

public CustomViewPager (Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);

boolean wrapHeight = MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST;

final View tab = getChildAt(0);
int width = getMeasuredWidth();
int tabHeight = tab.getMeasuredHeight();

if (wrapHeight) {
// Keep the current measured width.
widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
}

int fragmentHeight = measureFragment(((Fragment) getAdapter().instantiateItem(this, getCurrentItem())).getView());
heightMeasureSpec = MeasureSpec.makeMeasureSpec(tabHeight + fragmentHeight + (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics()), MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

public int measureFragment(View view) {
if (view == null)
return 0;

view.measure(0, 0);
return view.getMeasuredHeight();
}
}
Это мой CustomPagerTabStrip:

Код: Выделить всё

int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
android.view.ViewGroup.LayoutParams params =  getLayoutParams();
params.height = getMeasuredHeight();
А это мой XML:
Пример:

Если высота первого фрагмента равна 100 пикселей, то все остальные фрагменты останутся на уровне 100 пикселей.
Поэтому, если высота второго фрагмента составит 130 пикселей, он будет обрезан до 100 пикселей.

Когда я попробовал для отладки, onMeasure на моем CustomViewPager всегда вызывается 4 раза при создании Activity, но все они читают только первый фрагмент. После этого onMeasure никогда не будет вызываться снова, даже когда я переключаюсь (сдвигаю влево/вправо) от одного фрагмента к другому.

Пожалуйста, помогите мне, я потратил много часов, чтобы заставить эту штуку работать.
Просто спросите меня, нужна ли вам дополнительная информация, спасибо за ваше время.


Подробнее здесь: https://stackoverflow.com/questions/235 ... ents-heigh
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»