基线对齐的TextView剪辑多行文本的底线

时间:2013-04-25 23:26:19

标签: java android textview

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

以下是它的外观示例:

Example of the problem

StackOverflow上有一个related question,建议的解决方案是为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>

1 个答案:

答案 0 :(得分:0)

我最终通过将TextView的布局重力更改为center_vertical来解决类似的问题。

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical" />

来自https://stackoverflow.com/a/11246243/3681880的想法