Подтвердить что ты не робот

Наполнить вид/макет в другой макет?

Я ищу способ раздуть другой макет в первый макет в андроиде. Как это сделать? Вот два файла XML. Первый - основной макет, второй - макет, который я хотел бы раздуть в первый.

Я не могу просто включить макет, поскольку я буду использовать этот метод, чтобы позже раздувать другие макеты в проводные кадры.

Код также по адресу: 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>

Второй макет

<?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>
4b9b3361

Ответ 1

Существует ViewStub, но я никогда не использовал его, и я думаю, что его нельзя использовать более одного раза.

Вы можете раздуть макет меню и прикрепить его к основному макету:

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);

Ответ 2

Я не уверен, что я понял, что вы сказали: "Я не могу просто включить макет, поскольку я буду использовать этот метод, чтобы позже раздувать другие макеты в проводные кадры". Но если вам нужно, чтобы второй макет многократно помещался в разные макеты, используйте <include layout="@layout/the_second_layout" /> в этих других макетах.