考虑以下布局:
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:padding="8dp"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Text" />
<ImageView
android:layout_width="48dp"
android:layout_height="48dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toEndOf="@id/text_view"
app:layout_constraintTop_toTopOf="parent"
tools:background="@android:color/black" />
</android.support.constraint.ConstraintLayout>
图像视图(或按钮或任何其他小部件,重要的是它具有固定的大小)在TextView的右/右对齐,其大小为wrap_content,因此,文本本身仅占用所需的空间。
我现在想要的是,当文本展开时(也就是更长的时间),该按钮将对齐到父级的右边,并且文本视图仅获得左侧的宽度并变为椭圆形。此刻,图像视图被推到外面,一旦填充整个父级,文本就会变成椭圆形。
我试图通过在图像上添加endToEnd =“ parent”约束并将水平偏差设置为0(请参见代码)来解决此问题,但这不起作用。
关于我可以做什么的任何建议?
为了防止ImageView
将推送到父对象之外,您需要将的结尾限制TextView
为的开头ImageView
以创建链。现在,要确保TextView
仅占用所需的空间,但也要强制实施其约束,则需要在中添加app:layout_constrainedWidth="true"
属性TextView
。
如果您想将ImageView
其立即保留在的右侧,则TextView
可以使用packed
水平偏差为的链式样式0
。如果您希望将ImageView
其与父级的右边对齐,则可以使用spread_inside
链式样式而不会产生偏差。
经过上述更改的结果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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:padding="8dp"
android:textSize="18sp"
app:layout_constrainedWidth="true"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/image_view"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Text" />
<ImageView
android:id="@+id/image_view"
android:layout_width="48dp"
android:layout_height="48dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/text_view"
app:layout_constraintTop_toTopOf="parent"
tools:background="@android:color/black" />
</android.support.constraint.ConstraintLayout>
编辑:根据评论中的要求,这是如何Barrier
在3TextViews
和ImageView
。在这种情况下,您无需为的末端指定约束,TextViews
因此不再需要将它们水平链接。相反,您将创建一个Barrier
,其方向为中引用end
的所有方向。这将确保始终位于最宽处。最后要做的是将的起始端限制为。TextViews
Barrier
Barrier
TextView
ImageView
Barrier
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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_view1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:padding="8dp"
android:textSize="18sp"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintBottom_toTopOf="@id/text_view2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Text1" />
<TextView
android:id="@+id/text_view2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:padding="8dp"
android:textSize="18sp"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintBottom_toTopOf="@id/text_view3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_view1"
tools:text="Text2" />
<TextView
android:id="@+id/text_view3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:padding="8dp"
android:textSize="18sp"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_view2"
tools:text="Text3" />
<android.support.constraint.Barrier
android:id="@+id/barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="end"
app:constraint_referenced_ids="text_view1,text_view2,text_view3" />
<ImageView
android:id="@+id/image_view"
android:layout_width="48dp"
android:layout_height="48dp"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/barrier"
app:layout_constraintTop_toTopOf="parent"
tools:background="@android:color/black" />
</android.support.constraint.ConstraintLayout>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句