ConstraintLayout - 匹配另一个视图的约束,但添加边距以使其更大

Posted

技术标签:

【中文标题】ConstraintLayout - 匹配另一个视图的约束,但添加边距以使其更大【英文标题】:ConstraintLayout - Match another view's constraints but add margin to make it larger 【发布时间】:2021-10-15 21:13:51 【问题描述】:

我有一个 TextView,它的宽度和高度在运行时根据提供给它的文本正文来解析。然后我有另一个视图,它需要与 TextView 的顶部/底部/开始/结束约束完全匹配,但要大 16dp。这是我尝试过的:

<TextView
    android:id="@+id/title"
    android:layout_
    android:layout_
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    android:text="Test title"
    />

<View
    android:layout_
    android:layout_
    app:layout_constraintTop_toTopOf="@id/title"
    app:layout_constraintBottom_toBottomOf="@id/title"
    app:layout_constraintStart_toStartOf="@id/title"
    app:layout_constraintEnd_toEndOf="@id/title"
    android:layout_margin="16dp"
    />

16dp layout_margin 使 View 在所有 4 个方向上都比 TextView 小 16dp ,而我想让它 16dp 。到目前为止,我发现的唯一解决方案是声明 4 个空间(每个空间距离其中一个约束 16dp),然后将视图约束到这些空间,老实说,这对于应该是一个简单的布局规则来说似乎有点矫枉过正。约束布局是否提供了一种更简单的方法来实现这一点?

【问题讨论】:

如果您知道运行时的尺寸,为什么不提供相同的宽度和高度以查看更多 16dp? 【参考方案1】:

对于视图,将边距设置为-16dp,如下所示:

<View
    android:layout_
    android:layout_
    android:layout_marginStart="-16dp"
    android:layout_marginTop="-16dp"
    android:layout_marginEnd="-16dp"
    android:layout_marginBottom="-16dp"
    app:layout_constraintBottom_toBottomOf="@id/title"
    app:layout_constraintEnd_toEndOf="@id/title"
    app:layout_constraintStart_toStartOf="@id/title"
    app:layout_constraintTop_toTopOf="@id/title" />

不要设置android:layout_margin="-16dp"。它不会起作用。

我正在使用 ConstraintLayout 版本 2.1.0。早期版本不允许使用负边距。

在这张图片中,我重新排列了视图并设置了背景颜色以突出显示视图的范围。

【讨论】:

经过反思,我认为这不是预期的行为,而是引入负边距的副产品。 android:layout_margin 不起作用但单独指定每个边距确实起作用的事实让我停下来。我认为这很容易在未来被打破,如果被报告会得到“不会修复”(只是在这里猜测。)

以上是关于ConstraintLayout - 匹配另一个视图的约束,但添加边距以使其更大的主要内容,如果未能解决你的问题,请参考以下文章

Android Kotlin - viewBinding 类型不匹配:推断类型为 DrawerLayout 但应为 ConstraintLayout

ConstraintLayout - 视图寻呼机的宽度

工具栏中的 ConstraintLayout 未将 match_parent 应用于宽度或高度

Rails 视图表以显示来自另一个模型的值

无法将查询另存为视图表

Android-ConstraintLayout约束布局使用