【问题标题】:Align views right in ConstraintLayout without clipping在 ConstraintLayout 中右对齐视图而不进行裁剪
【发布时间】:2018-04-12 07:44:42
【问题描述】:

我正在创建一个对话框,其中两个按钮相对于父 ConstraintLayout 对齐。

一切都很好,直到按钮的文本变得很长。当其中一个或两个按钮的文本很长时,按钮会超出父级的边界,从而导致文本被剪切,如下图所示。我想处理文本较长的情况。

即期望的行为是

  • 文本较长时,按钮应换行
  • 按钮应保持在父级范围内并遵守父级填充
  • 按钮应保持在父级右侧对齐

当按钮文本较短时,布局按预期工作:

按钮文字较长时:

  • 当取消按钮文本很长时,取消文本会被截断。发生这种情况是因为按钮本身被推到了父级的边界之外。
  • 再次,当确定按钮的文本很长时,取消超出父边界的文本,因为按钮超出了父边界。

布局代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/dialog_padding"
    android:paddingLeft="@dimen/dialog_padding"
    android:paddingRight="@dimen/dialog_padding"
    android:paddingTop="@dimen/dialog_padding">

    <TextView
        android:id="@+id/dialog_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/dialog_text_margin"
        tools:text="Dialog title" />

    <TextView
        android:id="@+id/dialog_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/dialog_text_margin"
        app:layout_constraintTop_toBottomOf="@id/dialog_title"
        tools:text="Dialog text content" />

    <Button
        android:id="@+id/cancel_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toStartOf="@id/ok_btn"
        app:layout_constraintTop_toBottomOf="@id/dialog_content"
        tools:text="Dismiss" />

    <Button
        android:id="@+id/ok_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@id/dialog_content"
        tools:text="Accept" />
</android.support.constraint.ConstraintLayout>

我试过无济于事的事情:

  • 在取消按钮上添加app:layout_constraintStart_toStartOf="parent"会导致按钮不再正确对齐,因此解决方案不正确
  • 将关闭按钮的末尾限制到接受按钮的开头会导致按钮不再右对齐
  • 对按钮使用layout_width="0dp" 并使用app:layout_constrainedWidth="true" 无效

【问题讨论】:

  • 当您将关闭按钮的末尾限制为接受按钮的开头时,您是否在按钮视图上设置了app:layout_constraintHorizontal_bias="1.0"
  • @nope4561759 我将它们水平链接起来,并将偏差设置为 1.0,如您所说,但偏差没有任何效果。更改后按钮实际上更左对齐。
  • 只是想添加这个以记录将app:layout_constraintStart_toStartOf="parent"添加到取消按钮的答案不正确,因为它会导致按钮不再正确对齐。

标签: android android-layout android-constraintlayout constraint-layout-chains


【解决方案1】:

这是我认为您正在尝试完成的两个屏幕截图。

首先,用一些简短的文字:

现在有一些长文本:

我对布局进行了一些改动,并在按钮被限制的宽度的 33% 处引入了一个准则。你没有指定按钮可以水平扩展多少,所以我做了这个假设。

此布局的 XML 如下所示。我将按钮的宽度设置为0dpmatch_constraints,以便调整它们的大小。这些按钮也被放置在将两个按钮组合在一起的packed 链中。水平偏差现在设置为0.5,但如果它开始向左蔓延,则增加它会使组向右移动。

ConstraintLayoutdocumentation 对这些功能以及如何使用它们进行了很好的描述。

<android.support.constraint.Guideline
    android:id="@+id/guideline"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.33" />

<TextView
    android:id="@+id/dialog_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/dialog_text_margin"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:text="Dialog title" />

<Button
    android:id="@+id/cancel_btn"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    app:layout_constraintEnd_toStartOf="@+id/ok_btn"
    app:layout_constraintHorizontal_chainStyle="packed"
    app:layout_constraintStart_toEndOf="@+id/guideline"
    app:layout_constraintTop_toBottomOf="@+id/dialog_title"
    tools:text="Dismiss" />

<Button
    android:id="@+id/ok_btn"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toEndOf="@+id/cancel_btn"
    app:layout_constraintTop_toTopOf="@+id/cancel_btn"
    tools:text="Accept" />

【讨论】:

    猜你喜欢
    • 2018-05-30
    • 1970-01-01
    • 2015-10-12
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多