Просмотр содержимого пейджера

Я пытаюсь установить высоту просмотра пейджера на wrap_content с помощью этого Android: я не могу иметь ViewPager WRAP_CONTENT

Но это оставляет дополнительный пробел внизу

Как мне удалить это место?

Это мой код XML:

<android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginTop="8dp"
            card_view:cardCornerRadius="@dimen/card_corner_radius">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">


            <com.test.android.custom_views.WrapContentHeightViewPager
                    android:id="@+id/similarRecipesPager"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="8dp"
                    android:visibility="visible" />

            </LinearLayout>
</android.support.v7.widget.CardView>

2 ответа

Попробуй это, переопределив на своем ViewPager следующим образом получит рост самого большого ребенка, которого он имеет в настоящее время.

@Override
protected void onMeasure(int widthMeasureSpec, int 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();
    if(h > height) height = h;
}

heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

}

Если вы используете WRAP_CONTENT, чтобы определить свой рост, а содержимое недостаточно велико, у вас будет дополнительное пространство, потому что это - предполагаемое поведение.

Если я вас правильно понял, вы хотите, чтобы ваш ViewPager занимал все возможное пространство вашей деятельности / фрагмента, где находятся другие представления.

Если вы хотите ViewPager, который занимает все доступное пространство, вы должны использовать weight собственность вашего LinearLayout:

<LinearLayout android:orientation="vertical"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

    <ViewPager android:id="@+id/my_view_pager"
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_weight="1"/>

    <View
        android:id="@+id/other_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

Таким образом, независимо от содержимого вашего viewPager, он заполнит все лишние пробелы.

Другие вопросы по тегам