dan*_*mez 8 android android-layout android-viewpager
我有一个viewpager,可以保存Nostra的Universal Image Loader加载的图像.此viewpager也是listview的一部分,作为标题.将高度设置为wrap_content不起作用,它只显示任何内容,但如果我将其设置为特定的dip,则可以正常工作.我的怀疑是,viewpager在加载图像之前将其内容包装起来,因此它不会显示任何内容.
这是布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginRight="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp">
<android.support.v4.view.ViewPager
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@id/viewpager"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<com.sblive.other.CirclePageIndicator
android:id="@+id/titles"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginBottom="3dp"
android:layout_gravity="center_horizontal|bottom"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerHorizontal="true"/>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/progressBar"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
ViewPager的PagerAdapter的一部分:
@Override
public Object instantiateItem(ViewGroup container, int position) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.header_item, container,false);
ImageView img = (ImageView) itemView.findViewById(R.id.imageView);
ProgressBar progressBar = (ProgressBar) itemView.findViewById(R.id.progressBar);
display(img, list.get(position), progressBar);
((ViewPager) container).addView(itemView);
return itemView;
}
Run Code Online (Sandbox Code Playgroud)
当以下情况时,视图不会重新计算高度(或宽度)"wrap_content"使用因此,动态添加项目时它不会自行刷新。你可以称之为 Android 的限制。
您可以通过重写 viewPager 的 onMeasure 方法来重新计算它的高度并将其设置为最大的子项。
@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);
}
Run Code Online (Sandbox Code Playgroud)
您也可以将其设置为等于 viewpager 第一个子级的高度。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
View child = getChildAt(0);
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int height = child.getMeasuredHeight();
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
Run Code Online (Sandbox Code Playgroud)
根据您想要实现的目标,您也可以正确使用layout_weight,以使viewpager占据父级中的剩余空间。
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |