【问题标题】:Constraint layout chains约束布局链
【发布时间】:2018-02-26 13:47:12
【问题描述】:

发现一个我发现很难使用ConstraintLayout 的案例 用附图解释一下我发现的问题

这里我们有两行。绿色框代表文本视图。橙色框代表 ImageViews(或一般的任何其他视图)。

在第一行,Textview1(左)被限制在屏幕的左侧。 imageview 被限制在这个 textview 上。

我遇到的问题是当这个文本视图大于右边的文本视图时。我不想通过图像剪辑该视图。我希望它最终像该图像中的第二行一样。

我想我应该使用约束链。但我无法让它工作。

关于如何实现我想要的任何想法?

编辑,添加布局

    <?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:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="19dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:ellipsize="end"
        android:lines="1"
        app:layout_constraintEnd_toStartOf="@+id/tv2"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="@string/lorem_ipsum" />


    <ImageView
        android:id="@+id/iv1"
        android:layout_width="16dp"
        android:layout_height="16dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        app:layout_constraintBottom_toBottomOf="@+id/tv1"
        app:layout_constraintEnd_toStartOf="@+id/tv2"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toEndOf="@+id/tv1"
        app:layout_constraintTop_toTopOf="@+id/tv1"
        tools:background="@drawable/ic_close" />


    <TextView
        android:id="@+id/tv2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginTop="8dp"
        android:textAlignment="viewEnd"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="18 000 000 Dollar" />¨


</android.support.constraint.ConstraintLayout>

【问题讨论】:

  • 请包含您的布局文件内容。
  • 添加了我对此的尝试之一。左边的文本在右边被剪掉

标签: android android-constraintlayout


【解决方案1】:

ConstrataintLayout 1.1.0-beta5 版提供了一些您正在寻找的更好的尺寸控制。请参阅release notes

具体来说,您可以使用layout_constraintWidth_default = wrap,它会在TextView 满足其约束限制时强制它进行换行。

Wrap 提供了一种重要的新行为,小部件调整大小就像使用 wrap_content 一样,但受到连接约束的限制。因此,小部件不会超出端点。

以下 XML 将 tv1iv1 放在由左侧的父级和右侧的 tv2 约束的打包链中。 tv1 已设置 app:layout_constraintWidth_default="wrap"

<android.support.constraint.ConstraintLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="16dp"
        android:layout_marginStart="8dp"
        android:ellipsize="end"
        android:lines="1"
        android:text="This is some very long text. How does it behave?"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/iv1"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintWidth_default="wrap"
        tools:ignore="HardcodedText" />


    <ImageView
        android:id="@+id/iv1"
        android:layout_width="16dp"
        android:layout_height="16dp"
        android:layout_marginEnd="8dp"
        android:background="#ff9d00"
        app:layout_constraintBottom_toBottomOf="@+id/tv1"
        app:layout_constraintEnd_toStartOf="@id/tv2"
        app:layout_constraintStart_toEndOf="@+id/tv1"
        app:layout_constraintTop_toTopOf="@+id/tv1"
        tools:ignore="ContentDescription" />


    <TextView
        android:id="@+id/tv2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:text="18 000 000 Dollar"
        android:textAlignment="viewEnd"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="HardcodedText" />

    <android.support.v4.widget.Space
        android:id="@+id/spacer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="@id/tv2"
        app:layout_constraintEnd_toStartOf="@id/tv2"
        app:layout_constraintTop_toTopOf="@id/tv2" />

</android.support.constraint.ConstraintLayout>

以下是这种带有长文本的布局的外观...

...还有一些短文...

【讨论】:

    【解决方案2】:

    您可以使用elevation 属性,如html 中的z-index。 像这样为 ImageView 添加elevation=1dp 为TextView 添加elevation=2dp

    <ImageView
        android:id="@+id/iv1"
        android:elevation="1dp"
        android:layout_width="16dp"
        android:layout_height="16dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        app:layout_constraintBottom_toBottomOf="@+id/tv1"
        app:layout_constraintEnd_toStartOf="@+id/tv2"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toEndOf="@+id/tv1"
        app:layout_constraintTop_toTopOf="@+id/tv1"
        tools:background="@drawable/ic_close" />
    
    
    <TextView
        android:id="@+id/tv2"
        android:elevation="2dp"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginTop="8dp"
        android:textAlignment="viewEnd"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="18 000 000 Dollar" />¨
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 2022-11-02
      • 2018-07-05
      • 1970-01-01
      • 2019-03-29
      相关资源
      最近更新 更多