ConstraintLayout 设置视图增长但不接触的约束

sai*_*jab 2 android android-constraintlayout

我在约束布局 A (textview)、B(textview) 和 C (imageview) 中有三个视图。B 有动态文本,因此我希望它尽可能增长,但不接触 C。它可以有多行,但我不想固定它的宽度,也不应该使 C 离开屏幕。我如何将约束布局用于此类布局。这就是我想要实现的https://i.stack.imgur.com/EIbnz.png如果文本较多,请将其设为多行。这就是我得到的https://i.stack.imgur.com/VG7Z5.png 。如果文本很长,最后一个图像视图将被推出屏幕。

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@drawable/button_background_rounded_gray"
    android:id="@+id/container"
    android:layout_width="wrap_content"
    android:layout_height="30dp">

<androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/docIcon"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:textAllCaps="true"
        android:gravity="center"
        android:text="PDF"
        android:textColor="@color/tcWhite"
        android:background="@drawable/button_background_rounded_red"
        android:layout_marginStart="10dp"
        android:textSize="7sp"
        android:layout_width="20dp"
        android:layout_height="20dp"/>

<androidx.appcompat.widget.AppCompatTextView
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:textSize="12sp"
        android:id="@+id/docName"
        tools:text="Accommodation Voucher -  Circus at Disneyland Paris - Demo - 11 Oct.pdf"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        app:layout_constraintStart_toEndOf="@+id/docIcon"
        android:layout_gravity="center_vertical"/>

<androidx.appcompat.widget.AppCompatImageView
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:id="@+id/docStatus"
        app:srcCompat="@drawable/ic_picture_as_pdf_red_24dp"
        android:layout_marginEnd="10dp"
        android:layout_width="20dp"
        android:layout_height="20dp"
        app:layout_constraintStart_toEndOf="@+id/docName"/>
Run Code Online (Sandbox Code Playgroud)

Che*_*amp 5

您没有显示ConstraintLayout您发布的整体宽度是如何确定的。对于这个答案,我使用了match_parent但另一个约束也将起作用。

\n\n

允许文本扩展到约束但仍然遵守约束的关键是app:layout_constrainedWidth="true"TextView. 我还将这三个视图放入水平链中。请参阅ConstraintLayout 开发人员指南

\n\n
\n

WRAP_CONTENT :强制约束(在 1.1 中添加)

如果将维度设置为 WRAP_CONTENT,则在 1.1 之前的版本中,它们将被视为文字维度 - 这意味着约束不会限制结果维度。虽然一般来说这已经足够了(而且速度更快),但在某些情况下,您可能想要使用 WRAP_CONTENT,但仍要继续强制执行约束来限制结果维度。在这种情况下,您可以添加相应的属性之一:

\n\n
   app:layout_constrainedWidth=\xe2\x80\x9dtrue|false\xe2\x80\x9d\n   app:layout_constrainedHeight=\xe2\x80\x9dtrue|false\xe2\x80\x9d\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

Activity_main.xml \n

\n\n
    <androidx.appcompat.widget.AppCompatTextView\n        android:id="@+id/docIcon"\n        android:layout_width="20dp"\n        android:layout_height="20dp"\n        android:layout_marginStart="10dp"\n        android:background="@drawable/ic_launcher_background"\n        android:gravity="center"\n        android:text="PDF"\n        android:textColor="@android:color/white"\n        android:textSize="7sp"\n        app:layout_constraintBottom_toBottomOf="parent"\n        app:layout_constraintEnd_toStartOf="@+id/docName"\n        app:layout_constraintStart_toStartOf="parent"\n        app:layout_constraintTop_toTopOf="parent"\n        app:textAllCaps="true" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id="@+id/docName"\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        android:layout_marginStart="8dp"\n        android:text="This is a very long name. This is a very long name. This is a very long name. "\n        android:textSize="12sp"\n        app:layout_constrainedWidth="true"\n        app:layout_constraintBottom_toBottomOf="parent"\n        app:layout_constraintEnd_toStartOf="@+id/docStatus"\n        app:layout_constraintStart_toEndOf="@+id/docIcon"\n        app:layout_constraintTop_toTopOf="parent" />\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id="@+id/docStatus"\n        android:layout_width="20dp"\n        android:layout_height="20dp"\n        android:layout_marginEnd="10dp"\n        app:layout_constraintBottom_toBottomOf="parent"\n        app:layout_constraintEnd_toEndOf="parent"\n        app:layout_constraintStart_toEndOf="@+id/docName"\n        app:layout_constraintTop_toTopOf="parent"\n        app:srcCompat="@drawable/ic_launcher_foreground" />\n</androidx.constraintlayout.widget.ConstraintLayout>\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

这是一个更简单的演示。

\n\n

在此输入图像描述

\n\n

活动主文件

\n\n
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\n    xmlns:app="http://schemas.android.com/apk/res-auto"\n    xmlns:tools="http://schemas.android.com/tools"\n    android:layout_width="400dp"\n    android:layout_height="wrap_content"\n    android:background="@android:color/darker_gray">\n\n\n    <Button\n        android:id="@+id/button"\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        android:layout_marginBottom="8dp"\n        android:text="Button"\n        app:layout_constraintBottom_toBottomOf="parent"\n        app:layout_constraintStart_toStartOf="parent"\n        app:layout_constraintTop_toTopOf="parent" />\n\n    <EditText\n        android:id="@+id/textView"\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        android:text="Type here..."\n        app:layout_constrainedWidth="true"\n        app:layout_constraintEnd_toStartOf="@+id/imageView"\n        app:layout_constraintHorizontal_bias="0.0"\n        app:layout_constraintStart_toEndOf="@+id/button"\n        app:layout_constraintTop_toTopOf="parent" />\n\n    <ImageView\n        android:id="@+id/imageView"\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        app:layout_constraintBottom_toBottomOf="parent"\n        app:layout_constraintEnd_toEndOf="parent"\n        app:layout_constraintTop_toTopOf="parent"\n        app:srcCompat="@mipmap/ic_launcher" />\n</androidx.constraintlayout.widget.ConstraintLayout>\n
Run Code Online (Sandbox Code Playgroud)\n