我的最终目标是在一个左对齐、压缩的水平链中有两个单行文本视图,这两个视图都可以增长以填满剩余的空间,必要时将其平均分割,在没有空间时省略。
视觉辅助:
下面是我试图实现的布局代码:
<?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,直到它不再可见为止。视觉辅助(实际行为):
我尝试在每个视图上使用类似于将
layout_constraintHorizontal_weight
设置为.5这样的设置,但这没有效果,除非我将两个视图的宽度都更改为0dp(match_constraints),这将打破两个视图都有短文本的情况(它在两个文本视图之间添加了额外的空间)。感觉是,当您将
width=wrap_content
与layout_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>