webdevqa.jp.net

Android:XMLレイアウトを動的に含める方法

UIをいくつかのXMLレイアウトに分解したい。最初のレイアウトはメインレイアウトになり、他のレイアウトはコンテンツレイアウトになります。

実行時に動的に含めるcontent_layoutを設定できるようにしたいので、XMLファイルに"layout="@+layout/content_layout"を設定したくありません。

私のレイアウトは次のとおりです。

main_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="600dp"
    Android:layout_height="800dp" >

    <TextView
        Android:id="@+id/title"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true" />

    <include /> <!-- I WANT TO INCLUDE MY CONTENT HERE -->

    <Button
        Android:id="@+id/cancelButton"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_centerHorizontal="true"
        Android:text="Cancel" />

</RelativeLayout>

content_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/whatever"
    Android:layout_height="wrap_content"
    Android:layout_width="fill_parent" />

content_layout2.xml:

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/whatever2"
    Android:layout_height="wrap_content"
    Android:layout_width="fill_parent" />

どうやってやるの?

ありがとう!

35
nbarraille
<RelativeLayout Android:id="@+id/rl" ...

あなたのコードで:

// get your outer relative layout
RelativeLayout rl = (RelativeLayout) findById(R.id.rl);


// inflate content layout and add it to the relative layout as second child
// add as second child, therefore pass index 1 (0,1,...)

LayoutInflater layoutInflater = (LayoutInflater) 
        this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
rl.addView(1, layoutInflater.inflate(R.layout.content_layout, this, false) ); 
39
Mathias Conradt

ViewStub を使用してみて、プログラムで膨張させるレイアウトを変更するだけです。

この回答では、1つのViewStubの使用について説明します。

5
Bryan Denny