可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I got issues when worked with ViewPaper
. It doesn't show anything when I set ViewPaper's height = wrap_content
and it shows if I set height for ViewPager
(ex: android:layout_height= "350dp"
). Please help! Thanks!
This is my xml code:
<?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>
Resolved: I follow this link and it help me resolved this issues. https://stackoverflow.com/a/24666987/1928560
回答1:
ViewPager height must either be specified match_parent
or you must specify a value for it. Two solutions,
- Use weights concept inside
LinearLayout
or - Use
onMeasure
method in your class file. Refer Android: I am unable to have ViewPager WRAP_CONTENT
This is how you can use weights in your 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>
This way your viewpager layout and ExpandableListView shares equal height. You can change the ratio by changing the weight value
回答2:
=>100% working when viewpager height set wrap_content.
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; } }
回答3:
Hye there , i am also using this, Kindly give it a try and see if it solves your problem.
<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>