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(...)
しかし、どれもうまくいきませんでした。
私があなたの質問に従ったかどうかはわかりません。子ビューをRelativeLayoutに添付しようとしていますか。もしそうなら、あなたはの行に沿って何かをしたいです。
RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
item.addView(child);
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);
回答が遅れていますが、これを取得するための1つの方法を追加したいと思います
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.mylayout, item );
item
は、子レイアウトを追加する親レイアウトです。
これは、古い投稿ですが、xmlから膨らませられている子ビューをビューグループレイアウトに追加する場合は、どのタイプのビューグループの手掛かりを付けてinflateを呼び出す必要があるかを追加すると便利です。に追加されます。好きです:
View child = getLayoutInflater().inflate(R.layout.child, item, false);
Inflateメソッドはかなりオーバーロードされており、ドキュメント内の使用法のこの部分について説明しています。このような変更を加えるまで、xmlから膨らんだ単一のビューが親の中で正しく整列されないという問題がありました。
もっと簡単な方法は使うことです
View child = View.inflate(context, R.layout.child, null)
item.addChild(child) //attach to your item
レイアウトインフレ
View view = null;
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.mylayout, null);
main.addView(view);
アクティビティに参加していない場合は、LayoutInflater
クラスの静的なfrom()
メソッドを使用してLayoutInflater
を取得するか、コンテキストメソッドgetSystemService()
からサービスをリクエストすることもできます。
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年前になっていることを知っていますが、まだ言及する価値があります)
このリンクを確認してください。それは答え - > https://possiblemobile.com/2013/05/layout-inflation-as-intended/を持っています
単一のビューを複数回追加したい場合は、使用する必要があります。
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);
}
それからそれはすべての準備ができて追加されたビューの例外を投げます。
AttachToRootをTrueに設定します
XMLレイアウトファイルで、レイアウト幅とレイアウトの高さをmatch_parentに設定してボタンを指定したと考えてください。
<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);
この解決策があなたのために働くことを願っています。
RelativeLayoutに子ビューを添付しようとしていますか?あなたは以下のようにすることができます
RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, item, true);
私はこのエラーで一番苦労しましたが、私の独特の状況のためですが、ついに解決策を見つけました。
私の状況:WebView
を保持していて、メインアクティビティビューのボタンをクリックするとAlertDialog
で開く別のビュー(XML)を使用しています。しかしどういうわけかWebView
はメインアクティビティビューに属していたので(おそらくここからリソースを取得したため)、(ビューとして)自分のAlertDialog
に割り当てる直前に、私のWebView
の親、それをViewGroup
に入れ、そしてそのViewGroup
上のすべてのビューを削除します。これはうまくいった、そして私のミスは消えた。
// set up Alert Dialog box
AlertDialog.Builder alert = new AlertDialog.Builder(this);
// inflate other xml where WebView is
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
View v = layoutInflater.inflate(R.layout.your_webview_layout, null);
final WebView webView = (WebView) v.findViewById(R.id.your_webview_id);
// more code...
....後で[WebView
....]をロードした後.
// first, remove the parent of WebView from it's old parent so can be assigned a new one.
ViewGroup vg = (ViewGroup) webView.getParent();
vg.removeAllViews();
// put WebView in Dialog box
alert.setView(webView);
alert.show();
このコードを試してください:
View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,null); // Code for inflating xml layout
RelativeLayout item = view.findViewById(R.id.item);
LinearLayout parent = findViewById(R.id.container); //parent layout.
View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,parent,false);
RelativeLayout item = view.findViewById(R.id.item); //initialize layout & By this you can also perform any event.
parent.addView(view); //adding your inflated layout in parent layout.
Kotlinでは、次のことができます。
val content = LayoutInflater.from(context).inflate(R.layout.[custom_layout_name], null)
[your_main_layout].apply {
//..
addView(content)
}
それほど単純で複雑なことは必要ありません。
setContentView(R.layout.your_layout);