在我的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%屏幕高度的剩余部分)
答案 0 :(得分:10)
使用RelativeLayout。使用alignParentBottom="true"
将您的按钮添加到底部。然后使用layout_above="@id/buttons"
答案 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 根据以下链接给出的答案所作的评论。
答案 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>
希望它对您有用。