13

在我的 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 用视图填充 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.blank space(覆盖 45% 屏幕高度)
3.Textview(覆盖 10% 屏幕高度的其余部分)

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

4

8 回答 8

11

使用相对布局。使用 将按钮添加到底部alignParentBottom="true"。然后添加 ViewPagerlayout_above="@id/buttons"

于 2015-07-21T19:16:18.780 回答
9

把那些给viewpager:

 android:layout_height="0dp"
 android:layout_weight="1"
于 2013-10-02T20:52:59.340 回答
5

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

于 2013-05-02T19:50:25.760 回答
3

只需使用RelativeLayout 并使用像`

机器人:layout_below

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

于 2014-07-16T08:26:44.607 回答
0

就我而言,此代码有效:

<androidx.viewpager.widget.ViewPager
    android:id="@+id/myviewpager"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1" />
于 2019-10-04T21:52:20.700 回答
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”&gt;
<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>

希望对你有效。

于 2020-03-12T16:05:40.020 回答
0

只需执行以下操作即可为下方或上方的其他视图腾出空间:

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

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

链接:“ Android ViewPager 维度

于 2018-05-15T12:27:32.287 回答
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);
    }

}
于 2019-09-25T12:03:19.997 回答