我正在寻找一种方法将另一个布局扩展到android中的第一个布局。怎么会这样做?这是两个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>
答案 0 :(得分:33)
有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);
并以同样的方式添加另一个。
这将有效,因为您要将布局添加为父布局的最后一个子项。如果你想在第一个位置添加它,你可以膨胀你的布局而不将它附加到父级(使用false
作为最后一个arg),并手动添加它指定索引:
mainLayout.addView(menuLayout, 0);
答案 1 :(得分:7)
我不确定我真的理解你的想法“我不能只包括布局,因为我将使用这种方法将其他布局扩展到线框中。”
但是如果您需要在其他各种布局中多次放置第二个布局,请在这些其他布局中使用<include layout="@layout/the_second_layout" />
。