web-dev-qa-db-ja.com

ビュー/レイアウトを別のレイアウトに拡張しますか?

Androidで別のレイアウトを最初のレイアウトに膨らませる方法を探しています。どうすればいいですか?以下は2つのXMLファイルです。 1つ目はメインレイアウト、2つ目は最初に拡張したいレイアウトです。

この方法を使用して後で他のレイアウトをワイヤーフレームに膨らませるので、レイアウトを含めることはできません。

また、 http://Pastebin.com/wjZ4s1cs にコードを記述してください。stackoverflowはXMLを好まないためです。

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="horizontal"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:background="#ff000000"
    >
    <TextView
        Android:id="@+id/headerMenuText"
        Android:text="@string/main_menu_title"
        Android:layout_height="wrap_content"
        Android:layout_width="fill_parent"
        Android:textSize="16pt"
        Android:paddingTop="10px"
        Android:paddingBottom="10px"
        Android:gravity="center"
    >
    </TextView>
    <TableLayout
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_y="100dip"
        Android:gravity="center"
        Android:layout_gravity="center"
    >
        <TableRow
            Android:gravity="center"
            Android:layout_gravity="center">
            <ImageView
                Android:id="@+id/menuItem1"
                Android:layout_height="101dip"
                Android:layout_width="89dip"
                Android:src="@drawable/icon_settings"
            ></ImageView>

            <ImageView
                Android:id="@+id/menuItem2"
                Android:layout_height="101dip"
                Android:layout_width="89dip"
                Android:src="@drawable/icon_system_restart"
            ></ImageView>

            <ImageView
                Android:id="@+id/menuItem3"
                Android:layout_height="101dip"
                Android:layout_width="89dip"
                Android:src="@drawable/icon_game_history"
            ></ImageView>

            <ImageView
                Android:id="@+id/menuItem4"
                Android:layout_height="101dip"
                Android:layout_width="89dip"
                Android:src="@drawable/icon_game_correction"
            ></ImageView>

            <ImageView
                Android:id="@+id/menuItem5"
                Android:layout_height="101dip"
                Android:layout_width="89dip"
                Android:src="@drawable/icon_game_other"
            ></ImageView>
        </TableRow>

        <TableRow Android:gravity="center">
            <TextView
                Android:id="@+id/menuItemText1"
                Android:layout_height="wrap_content"
                Android:layout_width="wrap_content"
                Android:text="@string/main_menu_item_text_1"
                Android:layout_gravity="center"
                Android:gravity="center"
            ></TextView>

            <TextView
                Android:id="@+id/menuItemText2"
                Android:layout_height="wrap_content"
                Android:layout_width="wrap_content"
                Android:text="@string/main_menu_item_text_2"
                Android:layout_gravity="center"
                Android:gravity="center"
            ></TextView>

            <TextView
                Android:id="@+id/menuItemText3"
                Android:layout_height="wrap_content"
                Android:layout_width="wrap_content"
                Android:text="@string/main_menu_item_text_3"
                Android:layout_gravity="center"
                Android:gravity="center"
            ></TextView>

            <TextView
                Android:id="@+id/menuItemText4"
                Android:layout_height="wrap_content"
                Android:layout_width="wrap_content"
                Android:text="@string/main_menu_item_text_4"
                Android:layout_gravity="center"
                Android:gravity="center"
            ></TextView>

            <TextView
                Android:id="@+id/menuItemText5"
                Android:layout_height="wrap_content"
                Android:layout_width="wrap_content"
                Android:text="@string/main_menu_item_text_5"
                Android:layout_gravity="center"
                Android:gravity="center"
            ></TextView>

        </TableRow>
    </TableLayout>
    <View or layout
        Android:id="@+id/screen_layout_bottom_menu"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
    >
    </View or layout>
</AbsoluteLayout>

2番目のレイアウト

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/screen_bottom_menu"
    Android:layout_height="wrap_content"
    Android:layout_width="fill_parent"
    >
    <TableLayout
        Android:id="@+id/screen_bottom_menu_table"
        Android:layout_height="wrap_content"
        Android:layout_width="fill_parent"
    >
        <TableRow>
            <ImageView
                Android:id="@+id/screen_bottom_menu_button_back"
                Android:src="@drawable/back">
            </ImageView>

            <ImageView
                Android:id="@+id/screen_bottom_menu_button_ok"
                Android:src="@drawable/checkmark">
            </ImageView>

            <ImageView
                Android:id="@+id/screen_bottom_menu_button_cancel"
                Android:src="@drawable/xmark">
            </ImageView>

            <ImageView
                Android:id="@+id/screen_bottom_menu_button_key_toggle"
                Android:src="@drawable/lock">
            </ImageView>
        </TableRow>
    </TableLayout>
</LinearLayout>
18
Kevin Parker

ViewStubはありますが、一度も使用したことがなく、2回以上使用することはできないと思います。

メニューレイアウトを膨らませて、メインレイアウトにアタッチできます。

AbsoluteLayout mainLayout = (AbsoluteLayout) findViewById(R.id.your_main_layout);
LayoutInflater inflater = 
              (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View menuLayout = inflater.inflate(R.layout.your_menu_layout, mainLayout, true);

次に、変更したい場合は削除できます。

mainLayout.removeView(menuLayout);

同じように別のものを追加します。

これは、レイアウトを親レイアウトの最後の子として追加するために機能します。たとえば、1番目の位置に追加したい場合は、レイアウトを親にアタッチせずにレイアウトを拡張でき(falseを最後の引数として使用)、インデックスを指定して手動で追加します。

mainLayout.addView(menuLayout, 0);
34
bigstones

「後でレイアウトをインクルードすることはできません。この方法を使用して他のレイアウトをワイヤーフレームにインフレートするため、後でレイアウトを含めることはできません」ということを本当に理解したかはわかりません。ただし、2番目のレイアウトを他のさまざまなレイアウトに何度も配置する必要がある場合は、これらの他のレイアウトで<include layout="@layout/the_second_layout" />を使用します。

7
ernazm