我希望我的 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>