12

次のレイアウトでAndroidアプリケーションを構築しています。アプリケーションのレイアウト

layout_height="wrap_content"ViewPager では機能しないことが既にわかっています。

私の質問は、動的に変更する方法です。ViewPager のコンテンツは、2 つの xml レイアウトから拡張されます。vp_statistics.xml and vp_campaigns.xml.

ViewPager の xml は次のとおりです。

<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;
}

}

そして、Activity クラスの onCreate() メソッド内:

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)instantiateItem()

4

5 に答える 5

6
  1. weightSum=2親に属性を追加しLinearLayout、設定しorientation=verticalます。
  2. 最上位の子 LinearLayout を設定しlayout_weight=1ます。また、設定layout_height=0dip
  3. LinearLayoutとで ViewPager を別のページにラップしlayout_weight=1ますlayout_height=0dip
于 2012-08-17T06:26:48.150 に答える
2

ここで同様の質問に答えました。

このソリューション、ViewPager をオーバーライドonMeasure()wrap_contentて高さで機能するように拡張します。

于 2013-08-10T23:34:37.847 に答える
-1

各線形レイアウトに異なる画面領域を割り当てるには、layout_weightパラメータを使用してみてください。このコード内を再割り当てして、この「動的な」重み付けの変更を実現できます。コードで重みのレイアウトを実現する方法の Google 対応の例がたくさんある概要はこちら...

于 2012-06-06T09:26:14.867 に答える