约束布局按钮用重量包裹文本

Constraint Layout buttons wrap text with weight

我有一个带有 2 个文本按钮的 ConstraintLayout 容器。设置 android:ellipsize="end"android:maxLines="1".

下图描述了我要完成的工作。如果第一个按钮的文本很长,它应该占据 60% space,如果需要,第二个按钮可以占据其余部分。

不是直接的答案,但这可能对您有所帮助。

这可以通过 PercentRelativeLayout 实现,但是它已经被弃用了。幸运的是,它可以使用 ConstraintLayout 使用以下内容进行复制。

app:layout_constraintGuide_percent=".15"
app:layout_widthPercent="50%"
app:layout_heightPercent="50%"

有关详细指南,请查看此 documentation

使用 Guideline 就是答案:

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <Button
            android:id="@+id/button1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:maxLines="1"
            app:layout_constrainedWidth="true"
            app:layout_constraintEnd_toStartOf="@id/actionButtonEndGuideline"
            app:layout_constraintHorizontal_bias="0.001"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintWidth_default="wrap"
            tools:text="Button 1 text" />

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/actionButtonEndGuideline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_percent="0.6" />

        <Button
            android:id="@+id/button2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:maxLines="1"
            app:layout_constrainedWidth="true"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0"
            app:layout_constraintStart_toEndOf="@id/button1"
            app:layout_constraintTop_toTopOf="@id/button1"
            app:layout_constraintWidth_default="wrap"
            tools:text="Button 2 text" />

    </androidx.constraintlayout.widget.ConstraintLayout>

注意第一个按钮上的 app:layout_constraintHorizontal_bias="0.001"。我花了很多时间试图让它与 app:layout_constraintHorizontal_bias="0" 一起工作,直到我 运行 进入这个答案 layout_constrainedWidth not working properly.

这是在撰写本文 (1.1.3) 时最新稳定版本的 constraintlayout 依赖项中的一个错误,显然该修复程序在测试版 (2.0.0-beta8) 中可用