Возможно, я не могу объяснить проблему при заголовке.Динамическая высота Viewpager для всего фрагмента (как календарь Google)
Я работаю над календарным заявлением, разбиение на страницы этого календаря производится ViewPager. Во-первых, я не мог укрепить высоту ViewPager. Он заполнил всю страницу (содержимое Wrap не работало), поэтому я написал пользовательский просмотрщик, но появилась новая проблема.
Как показано ниже, некоторые месяцы в календаре имеют 6 линий, но в некоторых месяцах есть 7 линий в gridview. Она изменяется в соответствии с началом дня, общий день в месяц и т.д.
Я хочу, чтобы увеличить размер если количество номер строки 7 или сократить, если счетчик номер строки 6. календарь Google может сделай это.
Это мой CustomViewPager ниже.
public class CustomCalendarViewPager extends ViewPager {
public CustomCalendarViewPager(Context context) {
super(context);
}
public CustomCalendarViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int height = 0;
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = child.getMeasuredHeight();
int leap_space = Math.round((h/4));
if (h > height) height = (h * 7) + leap_space;
}
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
Если вы хотите получить больше кода, я могу отредактировать этот вопрос.
спасибо.
EDIT
calendar_pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
System.out.println("onPageSelected " + position);
calendar_pager.requestLayout();
calendar_pager.invalidate();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
Я вызвал функции requestLayout() и invalidate() в onOpageSelected, но я не понимаю, что я сделаю в onMeasure. Я редактировал свой вопрос. –
В основном вместо того, чтобы перебирать все элементы, чтобы получить высоту, просто получить высоту элемента по индексу getCurrentItem() –
Функция getCurrentItem() возвращает только текущую позицию. Я пробовал методы onMeasure() и setMeasuredDimension(). Я читал это => http://developer.android.com/reference/android/view/View.html и this => http://developer.android.com/guide/topics/ui/how-android-draws. html Plase вы можете сказать мне, что я должен делать в onMeasure(). Я боролся в течение 4 часов: D –