【问题标题】:Inflate a view / layout into another layout?将视图/布局膨胀到另一个布局?
【发布时间】:2018-10-17 18:01:29
【问题描述】:

我正在寻找一种方法将另一个布局膨胀到 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>

【问题讨论】:

  • 代码格式化:突出显示代码行并按下{}按钮,它将在每行开头添加4个空格->代码格式化。
  • AbsoluteLayout 已被弃用,因为它不支持不同尺寸的屏幕。请改用 LinearLayout 或 RelativeLayout。

标签: android android-layout android-view


【解决方案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);

并以相同的方式添加另一个。

这将起作用,因为您想将布局添加为父布局的最后一个子布局。如果你想在第一个位置添加它,你可以在不将它附加到父级的情况下扩展你的布局(使用false 作为最后一个参数),并手动添加它并指定索引:

mainLayout.addView(menuLayout, 0);

【讨论】:

  • @jeet.chanchawat ViewStub 似乎没有被弃用?
  • 'AbsoluteLayout' 被贬低
  • @jeet.chanchawat AbsoluteLayout 已被弃用,因为它不支持不同尺寸的屏幕。请改用 LinearLayout 或 RelativeLayout。
  • 要将其添加到最后一个位置,请使用addView(menuLayout, -1)。使用-1 将其添加到此处记录的最后一个位置:developer.android.com/reference/android/view/ViewGroup
【解决方案2】:

我不确定我是否真正理解了您所说的“我不能只包含布局,因为我稍后将使用这种方法将其他布局填充到线框中”。 但是,如果您需要在其他各种布局中多次放置第二个布局,请在这些其他布局中使用 &lt;include layout="@layout/the_second_layout" /&gt;

【讨论】:

  • 我知道包含标签,但我希望根据占位符动态切换布局。
猜你喜欢
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多