ViewPager не поддерживает layout_height = wrap_content

Я создаю приложение для Android со следующим расположением. Макет приложения

Уже известно, что layout_height="wrap_content" не работает для ViewPager.

Мой вопрос – как изменить его динамически. Содержимое ViewPager раздувается из двух макетов xml, vp_statistics.xml and vp_campaigns.xml.

Вот xml для ViewPager

 <LinearLayout android:id="@+id/topcontent_wrapper" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="vertical" > </LinearLayout> <LinearLayout android:id="@+id/viewpager_wrapper" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> 

Вот код для моего PagerAdapter

 class MyPagerAdapter extends PagerAdapter{ @Override public int getCount() { // TODO Auto-generated method stub return 2; } public Object instantiateItem(View collection, int pos){ LayoutInflater inflater = (LayoutInflater)collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); int resId = 0; switch(pos){ case 0: resId = R.layout.vp_statistics; break; case 1: resId = R.layout.vp_campaigns; break; } View view = inflater.inflate(resId, null); ((ViewPager)collection).addView(view, 0); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { // TODO Auto-generated method stub ((ViewPager)container).removeView((View)object); } @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0 == ((View)arg1); } @Override public Parcelable saveState() { // TODO Auto-generated method stub return null; } } 

И внутри my onCreate () mthod класса Activity:

 MyPagerAdapter adapter = new MyPagerAdapter(); ViewPager viewPager = (ViewPager)findViewById(R.id.viewpager); viewPager.setAdapter(adapter); viewPager.setCurrentItem(0); 

Есть ли способ получить высоту макетов vp_statistics.xml и vp_campaigns.xml и динамически назначать ее ViewPager (@id/viewpager) каждом ViewPager (@id/viewpager) объекта instantiateItem() ?

Solutions Collecting From Web of "ViewPager не поддерживает layout_height = wrap_content"

  1. Добавьте weightSum=2 к родительскому LinearLayout и установите orientation=vertical .
  2. Установите верхний дочерний элемент layout_weight=1 . Кроме того, установите layout_height=0dip
  3. Оберните ViewPager в другой LinearLayout с layout_weight=1 и layout_height=0dip

Я ответил на аналогичный вопрос.

Решение расширяет ViewPager, чтобы переопределить onMeasure() чтобы wrap_content только с высотой.

Используйте 0dp вместо wrap_content и для динамического изменения этого

 pager = new ViewPager(this); pager.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 

Чтобы назначить различные layout_weight экрана для каждого линейного макета, попробуйте использовать параметр layout_weight . Вы можете переназначить этот код в коде для достижения этого «динамического» изменения веса. Обзор здесь с большим количеством примеров, способных Google, как достичь макетов веса в коде …

Использовать RelativeLayout :

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > </LinearLayout> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_below="@+id/layout" > </android.support.v4.view.ViewPager> </RelativeLayout>