如何在版面内包含版面?


Answers:


193

编辑:如在此正确地在评论中要求一些更多信息。使用include标签

<include
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   layout="@layout/yourlayout" />

包括要重用的布局。

检查此链接 ...


11
只是一个很小的细节:使用android:layout_width =“ match_parent”而不是android:layout_width =“ fill_parent”。不推荐使用fill_parent。
三位一体

1
我是否可以包含布局并通过xml设置其某些属性,例如直接在<include>标签中的子布局中设置文本字符串?
JohnyTex

@JohnyTex不知道是否可以在<include />标记中直接执行此操作,但是,可以使用Java代码进行操作。请参阅下面的Phileo99答案,以了解如何获得对包含布局的引用。然后您可以更改其内容。
摩西

56

请注意,如果您将其包含android:id...<include />代码中,它将覆盖所包含布局中定义的所有ID。例如:

<include
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:id="@+id/some_id_if_needed"
   layout="@layout/yourlayout" />

yourlayout.xml:

<LinearLayout
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:id="@+id/some_other_id">
   <Button
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:id="@+id/button1" />
 </LinearLayout>

然后,您将在代码中引用此包含的布局,如下所示:

View includedLayout = findViewById(R.id.some_id_if_needed);
Button insideTheIncludedLayout = (Button)includedLayout.findViewById(R.id.button1);


6

试试这个

<include
            android:id="@+id/OnlineOffline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            layout="@layout/YourLayoutName" />

2

来自有关重新使用布局的官方文件

尽管Android提供了各种小部件来提供小的可重复使用的交互元素,但您可能还需要重用需要特殊布局的较大组件。为了有效地重复使用完整的布局,您可以使用标签在当前布局内嵌入另一个布局。

这是我的header.xml文件,可以使用包含标签重用它

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF"
    >


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:gravity="center"
        android:text="@string/app_name"
        android:textColor="#000000" />

</RelativeLayout>

不,我用 XML中的标记,以从另一个XML文件添加另一个布局。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#f0f0f0" >


    <include
        android:id="@+id/header_VIEW"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        layout="@layout/header" />

        <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="#ffffff"
        android:orientation="vertical"
        android:padding="5dp" >


    </LinearLayout>

为什么将TextView放在RelativeLayout中而不是在根视图中?
弗洛里安·沃尔瑟

@FlorianWalther这是一个示例
IntelliJ Amiya

感谢您及时的回复。但是我可以将TextView作为根元素还是对吗?因为我想重用ProgressBar,想知道是否必须将其放入布局中。
弗洛里安·沃尔瑟

@FlorianWalther会出现Because I want to reuse a ProgressBar什么问题?
IntelliJ Amiya

没问题,它有效。但是我在网上看到的所有示例都将单个小部件置于另一个布局中,我想知道为什么。
弗洛里安·沃尔瑟

0

了解更多使用此链接 https://developer.android.com/training/improving-layouts/reusing-layouts.html

    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".Game_logic">
    
          
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dp"
                    android:id="@+id/text1"
                    android:textStyle="bold"
                    tools:text="Player " />
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textStyle="bold"
                    android:layout_marginLeft="20dp"
    
                    android:id="@+id/text2"
                    tools:text="Player 2" />
          
            
          
        </LinearLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>

块引用

  • 您可以在上述布局中使用以下其他活动

     <?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                      xmlns:app="http://schemas.android.com/apk/res-auto"
                      xmlns:tools="http://schemas.android.com/tools"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent"
                      tools:context=".SinglePlayer">   
    
              <include layout="@layout/activity_game_logic"/> 
          </androidx.constraintlayout.widget.ConstraintLayout>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.