<include> 标签上的 ID 破坏布局
Id on <include> tag destroys layout
我在单独的 xml 文件中有一个布局,该文件包含在其他文件中。我想引用包含的文件,所以我设置了一个 id。但是有了 id,布局变得完全非结构化。
迷你示例:
父布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/test_include" />
</android.support.constraint.ConstraintLayout>
包含的布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/constraint_parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/t1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="1"
app:layout_constraintEnd_toStartOf="@id/t2"
app:layout_constraintStart_toStartOf="@id/constraint_parent" />
<TextView
android:id="@+id/t2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="2"
app:layout_constraintEnd_toStartOf="@id/t3"
app:layout_constraintStart_toEndOf="@id/t1" />
<TextView
android:id="@+id/t3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="3"
app:layout_constraintStart_toEndOf="@id/t2"
app:layout_constraintEnd_toEndOf="@id/constraint_parent"/>
结果布局如下:
但是如果我将包含标签更改为以下内容:
<include
android:id="@+id/test"
layout="@layout/test_include" />
结果是:
所以布局完全丢失了。不能将 id 添加到 include 标签吗?我想两次添加include标签,这就是为什么我想在两次include中添加两个不同的id,而不是直接引用被包含布局的父布局。
真的很奇怪。尝试将 layout_width 和 layout_height 添加到您的 include 标记中,这可能会修复这种奇怪的行为。
包含布局中的问题,请使用此 xml 代替
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/constraint_parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/t1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toStartOf="@id/t2"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/t2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="2"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toStartOf="@id/t3"
app:layout_constraintStart_toEndOf="@id/t1" />
<TextView
android:id="@+id/t3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="3"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/t2"
app:layout_constraintEnd_toEndOf="parent"/>
</android.support.constraint.ConstraintLayout>
我在单独的 xml 文件中有一个布局,该文件包含在其他文件中。我想引用包含的文件,所以我设置了一个 id。但是有了 id,布局变得完全非结构化。 迷你示例:
父布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/test_include" />
</android.support.constraint.ConstraintLayout>
包含的布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/constraint_parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/t1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="1"
app:layout_constraintEnd_toStartOf="@id/t2"
app:layout_constraintStart_toStartOf="@id/constraint_parent" />
<TextView
android:id="@+id/t2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="2"
app:layout_constraintEnd_toStartOf="@id/t3"
app:layout_constraintStart_toEndOf="@id/t1" />
<TextView
android:id="@+id/t3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="3"
app:layout_constraintStart_toEndOf="@id/t2"
app:layout_constraintEnd_toEndOf="@id/constraint_parent"/>
结果布局如下:
但是如果我将包含标签更改为以下内容:
<include
android:id="@+id/test"
layout="@layout/test_include" />
结果是:
所以布局完全丢失了。不能将 id 添加到 include 标签吗?我想两次添加include标签,这就是为什么我想在两次include中添加两个不同的id,而不是直接引用被包含布局的父布局。
真的很奇怪。尝试将 layout_width 和 layout_height 添加到您的 include 标记中,这可能会修复这种奇怪的行为。
包含布局中的问题,请使用此 xml 代替
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/constraint_parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/t1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toStartOf="@id/t2"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/t2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="2"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toStartOf="@id/t3"
app:layout_constraintStart_toEndOf="@id/t1" />
<TextView
android:id="@+id/t3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="3"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/t2"
app:layout_constraintEnd_toEndOf="parent"/>
</android.support.constraint.ConstraintLayout>