Как включить макет внутрь макета?

96

Как включить макет внутри макета в Android?

Создаю общий макет. Я хочу включить этот макет на другую страницу.

мохан
источник
Вот простой пример использования [в этом посте] [1] [1]: stackoverflow.com/questions/2732682/…
Асаф Пинхасси

Ответы:

198

Изменить: как в комментарии, который правильно запрошен здесь, дополнительная информация. Используйте 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 устарел.
Trinity
1
Могу ли я включить макет и установить некоторые из его свойств через xml, например, установить текстовую строку во вложенном макете непосредственно в теге <include>?
JohnyTex
@JohnyTex Не уверен, что вы можете сделать это прямо в <include />теге, однако вы можете сделать это с помощью java-кода. см . ответ Phileo99 ниже, чтобы узнать, как получить ссылку на включенный макет. а затем вы можете изменить его содержимое.
Моисей
58

Обратите внимание, что если вы включите android:id...в <include />тег, он переопределит любой идентификатор, определенный внутри включенного макета. Например:

<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);
Phileo99
источник
6

Попробуй это

<include
            android:id="@+id/OnlineOffline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            layout="@layout/YourLayoutName" />
Абхи
источник
3

Из официальных документов о повторном использовании макетов

Хотя Android предлагает множество виджетов для предоставления небольших интерактивных элементов, которые можно использовать повторно, вам также может потребоваться повторно использовать более крупные компоненты, требующие особого макета. Чтобы эффективно повторно использовать полные макеты, вы можете использовать тег для встраивания другого макета в текущий макет.

Вот мой файл header.xml, который я могу повторно использовать с помощью тега include

<?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>
IntelliJ Amiya
источник
Зачем помещать 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>
    
Аджай Патель
источник