Як включити макет всередину макета?


Відповіді:


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 застарілий.
Трійця

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


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>

Навіщо розміщувати 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>
    
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.