与ViewPaper
合作时遇到了问题。
当我设置ViewPaper的height = wrap_content
时它没有显示任何内容,它显示我是否为ViewPager
设置了高度(例如:android:layout_height= "350dp"
)。请帮忙!
谢谢!
这是我的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:background="@color/white"
android:orientation="vertical" >
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:scrollbars="none" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="#FF0000"
android:gravity="center"
android:text="Quick Links"
android:textColor="@color/white"
android:textSize="20sp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</android.support.v4.view.ViewPager>
<com.viewpagerindicator.CirclePageIndicator
android:id="@+id/circlePage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/pager"
android:layout_marginBottom="10dp" >
</com.viewpagerindicator.CirclePageIndicator>
</RelativeLayout>
<com.custom.ExpandableHeightListView
android:id="@+id/lvAdmissions"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:divider="@drawable/bg_listview_divider"
android:dividerHeight="1dp"
android:listSelector="@drawable/selector_animation" >
</com.custom.ExpandableHeightListView>
</LinearLayout>
</ScrollView>
</LinearLayout>
已解决:我按照此链接帮助我解决了这个问题。 https://stackoverflow.com/a/24666987/1928560
答案 0 :(得分:11)
必须指定ViewPager高度match_parent
,或者必须为其指定值。两种解决方案,
LinearLayout
中使用权重概念
或onMeasure
方法。请参阅Android: I am unable to have ViewPager WRAP_CONTENT 这是您在LinearLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="#FF0000"
android:gravity="center"
android:text="Quick Links"
android:textColor="@color/white"
android:textSize="20sp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>
<com.viewpagerindicator.CirclePageIndicator
android:id="@+id/circlePage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/pager"
android:layout_marginBottom="10dp" >
</com.viewpagerindicator.CirclePageIndicator>
</RelativeLayout>
<com.custom.ExpandableHeightListView
android:id="@+id/lvAdmissions"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/white"
android:divider="@drawable/bg_listview_divider"
android:dividerHeight="1dp"
android:listSelector="@drawable/selector_animation" >
</com.custom.ExpandableHeightListView>
</LinearLayout>
这样,您的viewpager布局和ExpandableListView共享相同的高度。您可以通过更改权重值来更改比率
答案 1 :(得分:3)
=&gt;当viewpager height设置为wrap_content时,100%正常工作。
public class FollowUseWrapHeightViewPager extends ViewPager {
public FollowUseWrapHeightViewPager(Context context) {
super(context);
}
public FollowUseWrapHeightViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = 0;
View view = null;
for(int i = 0; i < getChildCount(); i++) {
view = getChildAt(i);
view.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = view.getMeasuredHeight();
if(h > height) height = h;
}
if (height != 0) {
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(getMeasuredWidth(), measureHeight(heightMeasureSpec, view));
}
/**
* Determines the height of this view
*
* @param measureSpec A measureSpec packed into an int
* @param view the base view with already measured height
*
* @return The height of the view, honoring constraints from measureSpec
*/
private int measureHeight(int measureSpec, View view) {
int result = 0;
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
if (specMode == MeasureSpec.EXACTLY) {
result = specSize;
} else {
// set the height from the base view if available
if (view != null) {
result = view.getMeasuredHeight();
}
if (specMode == MeasureSpec.AT_MOST) {
result = Math.min(result, specSize);
}
}
return result;
}
}
答案 2 :(得分:1)
Hye,我也在使用它,请试一试,看看它是否解决了你的问题。
<LinearLayout
android:id="@+id/container_app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>