Android中的ViewPager是全屏?

时间:2012-12-20 07:05:51

标签: android android-layout android-viewpager

在我的xml文件中,我有一个线性布局,其中包含用于显示图像的ViewPager和另一个包含用于选择图像的上一个和下一个按钮的线性布局。我的xml看起来像这样:

 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/goto_first"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="first" >
            </Button>

            <Button
                android:id="@+id/goto_last"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="last" >
            </Button>
        </LinearLayout>

    </LinearLayout>

我的问题是ViewPager正在全屏显示,并且带有前一个下一个按钮的Linearlayout没有显示,因为没有剩余空间来绘制此LinearLayout。

我正在使用Fragments用View填充ViewPager。进入ViewPager的片段视图的xml文件是:

<ImageView
    android:id="@+id/ItemImage"
    android:layout_width="320dp"
    android:layout_height="180dp" />

<TextView
    android:id="@+id/ItemText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="left|bottom"
    android:layout_marginBottom="5dp"
    android:textColor="#ffffffff"
    android:textStyle="bold" />
</FrameLayout>

渲染后我得到的输出是这样的:
    1.image(覆盖45%的屏幕高度)    
2.空白区域(屏幕高度为45%)    
3.Textview(覆盖10%屏幕高度的其余部分)

我想要的输出是:  
1.image(覆盖45%的屏幕高度)    
2.Textview(覆盖10%的屏幕高度)    
3.LinarLayout for Buttons(覆盖45%屏幕高度的剩余部分)

8 个答案:

答案 0 :(得分:10)

使用RelativeLayout。使用alignParentBottom="true"将您的按钮添加到底部。然后使用layout_above="@id/buttons"

添加ViewPager

答案 1 :(得分:8)

请将这些内容提供给viewpager:

 android:layout_height="0dp"
 android:layout_weight="1"

答案 2 :(得分:4)

viewpagers的问题是他们不知道大小,因为每个片段可能是不同的大小。您必须手动设置viewpager,而不是wrap_content。我建议为外部线性布局中的所有项目设置权重。

答案 3 :(得分:3)

只需使用RelativeLayout并使用类似`

的属性
  

android:layout_below

直到达到你想要的位置。在这些情况下,相对布局是你的朋友。

答案 4 :(得分:0)

Just Do The Following为下面或上面的其他观点腾出空间:

< android.support.v4.view.ViewPager **android:layout_width**="match_parent" **android:layout_height**="match_parent" **android:layout_weight**="1"/>

此答案取自 Jave 根据以下链接给出的答案所作的评论。

链接:“Android ViewPager dimension

答案 5 :(得分:0)

public class WrapViewPager extends ViewPager {

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

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

    @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, View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
            int h = child.getMeasuredHeight();
            if (h > height) height = h;
        }

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

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

}

答案 6 :(得分:0)

就我而言,此代码有效:

<androidx.viewpager.widget.ViewPager
    android:id="@+id/myviewpager"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1" />

答案 7 :(得分:0)

实施ap时遇到此问题。 要将图像填充到ViewPager中,请使用 RelativeLayout 而不是 FrameLayout

在我的情况下,FrameLayout占用了超过30%的空白空间。当我使用RelativeLayout时,该空间已经消失了。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent”>
<ImageView
        android:id="@+id/itemImagePager"
        android:layout_width="match_parent"
        android:layout_height=“match_parent"
        android:scaleType="fitCenter" />
<ProgressBar
        android:id="@+id/loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true”/>
</RelativeLayout>

希望它对您有用。