3

我希望我的 android 应用程序中 ListView 中的项目在左侧包含一个复选框,然后是一些文本,然后是一个按钮。我希望复选框和按钮与文本基线对齐。为了实现这一点,我将所有三个都放在一个 LinearLayout 中,它默认情况下尝试基线对齐其项目。这很好用,除了多行文本的底线总是被剪裁。

这是它的外观示例:

问题示例

StackOverflow 上有一个相关的问题,建议的解决方案是为 TextView 设置 layout_gravity = "fill",但这违背了目的,因为它禁用了基线对齐。这个问题有什么解决方案可以让我保持基线对齐吗?这似乎是一个非常基本的问题,肯定很多人都必须遇到。

我发现的唯一其他解决方案是在文本视图的底部添加一些填充,但这似乎很老套,而且对字体大小不健壮。我可以根据字体大小从代码中以程序方式设置填充,但似乎获得正确的值可能很棘手。

这是说明问题的示例布局:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="8dp"
    android:paddingTop="8dp"
    android:baselineAligned="true">

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="9dp"
        android:layout_marginRight="8dp"
        android:textSize="16sp"/>

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Woah, this is a long text line, enough that tit has to wrap to multiple lines, thus demonstrating our problem.  In fact, it wraps to multiple lines!  So many lines!  I hope they all show up correctly!"
            android:textSize="16sp"/>

    <FrameLayout
        android:layout_width="40dp"
        android:layout_height="match_parent">

        <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="12dp"
                android:src="@drawable/ic_note_check_delete"/>
    </FrameLayout>
</LinearLayout>
4

0 回答 0