Как включить макет внутри макета в Android?
Создаю общий макет. Я хочу включить этот макет на другую страницу.
Ответы:
Изменить: как в комментарии, который правильно запрошен здесь, дополнительная информация. Используйте include
тег
<include
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/yourlayout" />
чтобы включить макет, который вы хотите использовать повторно.
Проверьте эту ссылку ...
<include />
теге, однако вы можете сделать это с помощью java-кода. см . ответ Phileo99 ниже, чтобы узнать, как получить ссылку на включенный макет. а затем вы можете изменить его содержимое.
Обратите внимание, что если вы включите 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);
Используйте <include />
тег.
<include
android:id="@+id/some_id_if_needed"
layout="@layout/some_layout"/>
Также прочтите статьи о создании повторно используемых компонентов пользовательского интерфейса и слиянии макетов .
Из официальных документов о повторном использовании макетов
Хотя 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>
Because I want to reuse a ProgressBar
какая проблема?
Узнать больше По этой ссылке 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>