当我有一个TextView与一个\n在文本中,,在右边我有两个单线TextViews,一个在另一个之间没有间距。我已经为所有三个textview设置了以下内容。

android:lineSpacingMultiplier="1" 
android:lineSpacingExtra="0pt" 
android:paddingTop="0pt" 
android:paddingBottom="0pt"

第一行的左侧TextView线完美地与右上角TextView。

左TextView的第二行略高于右下TextView的第二行。

似乎有某种隐藏的填充顶部和底部的TextViews。我怎么才能去掉它呢?


当前回答

我认为这个问题可以这样解决:

 <TextView
        android:id="@+id/leftText"
        android:includeFontPadding="false"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30dp"
        android:text="Hello World!\nhello world" />

 <TextView
        android:id="@+id/rightUpperText"
        android:includeFontPadding="false"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/leftText"
        android:layout_alignTop="@+id/leftText"
        android:textSize="30dp"
        android:text="Hello World!" />

 <TextView
        android:id="@+id/rightLowerText"
        android:includeFontPadding="false"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/leftText"
        android:layout_below="@+id/rightUpperText"
        android:textSize="30dp"
        android:text="hello world" />

结果如下:

ScreenShot-1

ScreenShot-3

虽然rightLowerText中的特殊字符行看起来比leftText中的第二行高一些,但它们的基线仍然是对齐的。

其他回答

你可以用这里列出的一些技巧来部分解决这个问题(负边距,字体填充等),但你不能绕过字体本身的大小[1]。在所有语言中,字体的每个“单元格”的固定高度必须足以容纳最高的字符。

如果你采用了其他答案中列出的技巧,字体可以被剪掉。

解决方案是向你的设计师解释字体是如何包装的,并让他们在设计中考虑到这一点。不要因为在翻译到其他语言时出现bug而现在就进行修改。

我想人们可以用压缩升序和降序来打包他们自己的字体。

您可能想要尝试将左侧文本视图的底部与右侧第二个文本视图的底部对齐。

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/baselineImage"
        android:includeFontPadding="false" />

    <ImageView
        android:id="@+id/baselineImage"
        android:layout_width="1dp"
        android:layout_height="1dp"
        android:baselineAlignBottom="true"
        android:layout_alignParentBottom="true" />

    <!-- This view will be exactly 10dp below the baseline of textView -->
    <View
        android:id="@+id/view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_below="@+id/baselineImage" />

</RelativeLayout>

有了额外的ImageView,我们可以设置TextView基线对齐的ImageView和设置android:baselineAlignBottom上的ImageView为真,这将使ImageView基线底部。其他视图可以使用ImageView的底部来对齐自己,ImageView本身与TextView的基线相同。

然而,这只修复填充底部而不是顶部。

这个技巧对我很管用(min-sdk >= 18)。

我使用android:includeFontPadding="false"和一个像android:layout_marginTop="-11dp"和把我的TextView在一个FrameLayout(或任何ViewGroup…)

最后是示例代码:

<LinearLayout
    android:layout_width="60dp"
    android:layout_height="wrap_content"
    >

    <TextView
        style="@style/MyTextViews.Bold"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/yellow"
        android:textSize="48sp"
        android:layout_marginTop="-11dp"
        android:includeFontPadding="false"
        tools:text="1"/>
</LinearLayout>

添加android:includeFontPadding="false",看看是否有帮助。并使文本视图大小与文本大小相同,而不是“包装内容”。它肯定会起作用。