我的最终目标是在一个左对齐、压缩的水平链中有两个单行文本视图,这两个视图都可以增长以填满剩余的空间,必要时将其平均分割,在没有空间时省略。
视觉辅助:
android - 在使用layout_constrainedWidth时,如何防止ConstraintLayout链中的TextView将其他TextView超出其约束?-LMLPHP
下面是我试图实现的布局代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:maxLines="1"
        tools:text="@tools:sample/lorem"
        app:layout_constrainedWidth="true"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="@id/textView2"
        app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintHorizontal_bias="0"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="4dp"
        android:ellipsize="end"
        android:maxLines="1"
        tools:text="@tools:sample/lorem"
        app:layout_constrainedWidth="true"
        app:layout_constraintStart_toEndOf="@id/textView1"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />

</android.support.constraint.ConstraintLayout>

如您所见,我已经在水平链中布置了两个文本视图。我已经把链式的包装好了,这样它们就可以放在一起了。我将水平偏移设置为0,这样链就左对齐了。我已经设置了宽度来包装内容,这样当文本很短时它们不会拉伸,而且我还设置了app:layout_constrainedWidth="true",这样当文本很长时它们不会超过它们的界限。这几乎完全符合我的要求,除非textview2中的文本增长。随着textview1的增长,它会将textview2向右推,直到它达到其约束,此时它会省去(如预期/所需),但textview2的情况则不同。随着textview2的增长,它会向右侧拉伸以填充房间,但一旦它达到其约束条件,而不是省略号,它会继续拉伸并开始向左推动textview1,直到它不再可见为止。
视觉辅助(实际行为):
android - 在使用layout_constrainedWidth时,如何防止ConstraintLayout链中的TextView将其他TextView超出其约束?-LMLPHP
我尝试在每个视图上使用类似于将layout_constraintHorizontal_weight设置为.5这样的设置,但这没有效果,除非我将两个视图的宽度都更改为0dp(match_constraints),这将打破两个视图都有短文本的情况(它在两个文本视图之间添加了额外的空间)。
感觉是,当您将width=wrap_contentlayout_constrainedWidth=true组合时,权重值将被忽略。这仅仅是constraintlayout的一个限制吗?我花了很多时间想办法让这件事成功,但现在看来这不可能。我已经回到使用线性布局和做一些设计妥协,但我真的想让这个工作,如果有人有任何想法。谢谢!

最佳答案

如果有人还在寻找答案,我想下面的代码会有帮助。

<?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"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <TextView
        android:id="@+id/text1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintWidth_max="wrap"
        app:layout_constraintWidth_percent="0.5"
        android:maxLines="1"
        android:ellipsize="end"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="@id/text2"
        app:layout_constraintHorizontal_chainStyle="packed"
        android:background="#ff0000"
        android:text="This is what you are looking for ?"
        />

    <TextView
        android:id="@+id/text2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintWidth_max="wrap"
        app:layout_constraintWidth_percent="1"
        android:maxLines="1"
        android:ellipsize="end"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toEndOf="@id/text1"
        app:layout_constraintEnd_toEndOf="parent"
        android:background="#ee0"
        android:text="This is a Long Text TextView2 And not something else"
        />

</android.support.constraint.ConstraintLayout>

08-18 19:21