【问题标题】:Constraint layout barrier not working as expected约束布局障碍未按预期工作
【发布时间】:2023-01-28 01:44:39
【问题描述】:

我有 2 个视图,我需要下面的屏障,但屏障没有按预期工作。 这是我的布局。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <TextView
        android:id="@+id/textView15"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="This is a text view"
        app:layout_constraintEnd_toStartOf="@+id/t1"
        android:textSize="20sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/t1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/textView15"
        app:layout_constraintTop_toTopOf="parent">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="This is a demo text to check wrap content"/>

    </com.google.android.material.textfield.TextInputLayout>

    <androidx.constraintlayout.widget.Barrier
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:barrierDirection="bottom"
        app:constraint_referenced_ids="textView15,t1"/>

</androidx.constraintlayout.widget.ConstraintLayout>

黑色虚线是屏障。

这可能是一个错误或我做错了,结果在预览和实际设备中是相同的

【问题讨论】:

  • 你做对了。这似乎是一个问题约束布局2.1.3.如果您可以退回,版本 2.0.4 可以使用。其他版本也可能没问题,但我没有检查过。
  • 我检查了其他版本,所有版本从 2.0.1 开始都有同样的问题。我不得不回滚到 2.0.0 版
  • 我有一个解决方案,我将作为答案发布,因为它可能对其他人有帮助。

标签: android xml android-layout android-constraintlayout constraintlayout-barrier


【解决方案1】:

如果您指定

app:layout_optimizationLevel="none"

在 XML 中约束布局,您会发现屏障将被正确放置。我不确定优化级别的设置是什么,但最近它一直是一个障碍问题。 (约束布局版本 2.1.3)。

这是在抑制优化之前布局的外观。屏障上升到右边文本视图如前所述。

我们通过在没有其他更改的 XML 中声明来抑制优化:

<androidx.constraintlayout.widget.ConstraintLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_optimizationLevel="none"
    xmlns:app="http://schemas.android.com/apk/res-auto">

现在布局看起来像这样:

屏障已下降到右侧下方文本视图它属于哪里。

这是与约束布局版本 2.1.3。

implementation 'androidx.constraintlayout:constraintlayout:2.1.3'

(似乎将优化级别设置为 standard 以外的任何东西都可以解决这个问题。)

【讨论】:

  • 这个答案也不起作用。
  • @AnkitVerma 查看现在有示例的更新答案。如果你得到不同的结果,我会很好奇。
  • 这次你的代码起作用了。它所需要的只是重建。
  • 不适用于 TextInputLayout 错误和 Barrier。
【解决方案2】:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <TextView
        android:id="@+id/textView15"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="visible"
        android:text="This is a text view"
        app:layout_constraintEnd_toStartOf="@+id/t1"
        android:textSize="20sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/t1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="visible"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/textView15"
        app:layout_constraintTop_toTopOf="parent">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="This is a demo text to check wrap content"/>

    </com.google.android.material.textfield.TextInputLayout>

    <androidx.constraintlayout.widget.Barrier
        android:id="@+id/barrier"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:barrierDirection="bottom"
        app:constraint_referenced_ids="textView15,t1"/>
    <Space
       android:id="@+id/space"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:visibility="visible"
       app:layout_constraintStart_toStartOf="parent"
       app:layout_constraintTop_toTopOf="@id/barrier" />
</androidx.constraintlayout.widget.ConstraintLayout>

【讨论】:

  • 你的布局中有什么线索?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 2015-06-18
  • 2016-09-15
  • 1970-01-01
相关资源
最近更新 更多