238

XML で定義されたレイアウトがあります。以下も含まれます。

<RelativeLayout
    android:id="@+id/item"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

この RelativeView を他の XML レイアウト ファイルで膨らませたいと思います。状況に応じて異なるレイアウトを使用する場合があります。どうすればいいですか?私はさまざまなバリエーションを試していました

RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)

しかし、どれもうまくいきませんでした。

4

14 に答える 14

416

あなたの質問に従ったかどうかわかりません-子ビューをRelativeLayoutにアタッチしようとしていますか? もしそうなら、あなたは次の行に沿って何かをしたい:

RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
item.addView(child);
于 2010-02-25T17:18:27.943 に答える
111

XML リソースをインフレートします。LayoutInflaterのドキュメントを参照してください。

レイアウトがmylayout.xmlにある場合は、次のようにします。

View view; 
LayoutInflater inflater = (LayoutInflater)   getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);

RelativeLayout item = (RelativeLayout) view.findViewById(R.id.item);
于 2010-02-25T16:54:31.873 に答える
28

遅い答えですが、これを取得する方法を1つ追加したいと思います

LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.mylayout, item );

whereitemは、子レイアウトを追加する親レイアウトです。

于 2011-05-04T16:15:27.927 に答える
20

これは古い投稿ですが、xml からインフレートされている子ビューをビューグループ レイアウトに追加する場合は、どのタイプのビューグループになるかの手がかりを付けて inflate を呼び出す必要があることを追加すると便利です。に追加されます。お気に入り:

View child = getLayoutInflater().inflate(R.layout.child, item, false);

inflate メソッドは非常にオーバーロードされており、ドキュメントで使用法のこの部分について説明しています。この種の変更を行うまで、xml から膨張した単一のビューが親で適切に整列しないという問題がありました。

于 2010-06-01T22:59:13.213 に答える
13

さらに簡単な方法は、

View child = View.inflate(context, R.layout.child, null)
item.addChild(child) //attach to your item
于 2015-09-02T02:43:05.003 に答える
8

レイアウトインフレ

View view = null;
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);
main.addView(view);
于 2016-04-11T07:59:12.980 に答える
6

アクティビティに参加していない場合は、クラスの静的from()メソッドを使用して を取得するか、コンテキスト メソッドからサービスをリクエストすることもできます。LayoutInflaterLayoutInflatergetSystemService()

LayoutInflater i;
Context x;       //Assuming here that x is a valid context, not null

i = (LayoutInflater) x.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//OR
i = LayoutInflater.from(x);

(ほぼ4年前のことですが、まだ言及する価値があります)

于 2014-02-06T22:04:07.800 に答える
5

AttachToRoot を True に設定

レイアウト幅とレイアウト高さが match_parent に設定された XML レイアウト ファイルでボタンを指定したとします。

<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/custom_button">
</Button>

このボタンのクリック イベントで、次のコードを設定して、このアクティビティのレイアウトを拡張できます。

LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.yourlayoutname, this);

この解決策がうまくいくことを願っています。

于 2018-07-18T12:21:05.390 に答える
4

単一のビューを複数回追加する場合は、使用する必要があります

   layoutInflaterForButton = getActivity().getLayoutInflater();

 for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
        FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);
        btnContainer.addView(btnView);
    }

あなたが好きなら

   layoutInflaterForButton = getActivity().getLayoutInflater();
    FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);

for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
            btnContainer.addView(btnView);
        }

次に、準備ができているすべての追加ビューの例外をスローします。

于 2015-02-25T05:44:00.330 に答える
-1

これには以下のコードスニペットを使用しましたが、うまくいきました。

LinearLayout linearLayout = (LinearLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
linearLayout.addView(child);
于 2016-11-23T11:37:26.833 に答える