June 3, 2012

xmlレイアウトをaddViewで追加する

xmlファイルで定義したレイアウトをソースコードでaddViewする方法です。

LayoutInflaterクラスからレイアウトリソースをViewクラスに変換して、それをaddView()します。

例ではxmlファイルで定義した子レイアウトをメインレイアウトに追加する形で3つ縦に並べています。並べつつレイアウト上に配置されたTextViewのテキストを書き換えています。子レイアウト内のidの使い方も示しています。

public class SampleAppActivity extends Activity {
    private final static String TAB = "SampleAppActivity";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main2);

        LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
        for (int i = 0; i < 3; ++i) {
            View view = getLayoutInflater().inflate(R.layout.sub, null);
            layout.addView(view);
            TextView text = (TextView) view.findViewById(R.id.text);
            text.setText("I'm android No." + i);
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    
    <ImageView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/myname" />

</LinearLayout>


参考:Android Developers:LayoutInflater

No comments:

Post a Comment