android UI - view_ager的wrap_content

时间:2015-08-08 18:03:49

标签: android-layout

我有顶部的viewpager和另一个vew(本例中的按钮)底部的线性布局。寻呼机中的视图具有不同的高度。我希望寻呼机在所有页面上都有wrap_content高度,按钮视图可以填充屏幕的其余部分。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent">

<android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"/>

<Button
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:text="New Button"
    android:id="@+id/button3"
    android:layout_weight="1"/>

</LinearLayout>

这不起作用。如果我将layout_weight=1同时提供给寻呼机和按钮,则无论内容高度如何,它们都会共享屏幕50:50。我试图在requestLayout()中致电ViewPager.OnPageChangeListener.onPageSelected(),但它没有帮助。还尝试了this

2 个答案:

答案 0 :(得分:0)

您是否尝试为寻呼机设置layout_weight = 1,为按钮设置layout_weight = 2?

答案 1 :(得分:0)

这适合我,但我认为不完美。

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    View titlestrip = getChildAt(0);
    int h = titlestrip.getMeasuredHeight();

    View fv = ((FragmentPagerAdapter)getAdapter()).getItem(getCurrentItem()).getView();
    if (fv != null) {
        fv.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        h += fv.getMeasuredHeight();
    }

    super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY));
}

它依赖于我的FragmentPagerAdapter.getItem()没有实例化新片段但从容器返回它的事实。