<include>标签上的ID破坏布局

时间:2019-05-19 14:21:44

标签: android android-layout android-constraintlayout android-include

我在单独的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 without id

但是,如果我将include标记更改为以下内容:

<include
    android:id="@+id/test"
    layout="@layout/test_include" />

结果是: Include with id

因此布局完全丢失了。不能在包含标签中添加ID吗?我想两次添加include标记,这就是为什么我要在两个include中添加两个不同的ID,而不是直接引用包含布局的父布局。

2 个答案:

答案 0 :(得分:1)

包含的布局中的问题,请改用此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>

答案 1 :(得分:0)

这真的很奇怪。尝试将 layout_width layout_height 添加到您的包含标记中,这可能会解决此奇怪的行为。