带有wrap_contents的斜体TextView似乎在右边缘剪切文本

Gre*_*ego 51 android textview italic

<TextView android:id="@+id/prodLbl"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:textColor="#FFFFFF"
    android:textSize="30dip"
    android:textStyle="italic"
    android:text="Magnifico"
    />
Run Code Online (Sandbox Code Playgroud)

似乎从最右边的角色剪辑几个像素,至少在480x800模拟器或Nexus One上.

对我来说它看起来像一个bug,但我只是一个Android初学者.我试图向左右添加边距,但它仍然保持裁剪.最后,我的黑客是在文本的两边添加一个空格.还有其他方法吗?

小智 21

您还可以使用Unicode不间断空格字符(\ u00A0).


dan*_*abs 20

android:layout_width="wrap_content",为包装内容呈现提供一个矩形.一切都适用于普通文本(非斜体).

一旦你已经italic启用了文本,该文本包裹将尝试融入矩形,因此最右边的字符将除非其未切能(如被切断.,),1等)

建议的解决方案是在文本的末尾有一个空格(或者更好的??)

PS:这也适用于android:gravity="right"因为文本将被推到最右边.如果我们有italic文字,我们就会遇到同样的问题.

  • 它永远不会被修复。这个问题是 2010 年提出的,我在这里寻找 2022 年的解决方案...... (7认同)
  • 这太难以置信了……为什么,安卓先生?告诉我这是一个错误,它将被修复.. (3认同)

小智 12

我添加" \"到strings.xml中的所有字符串的末尾.\是逃避角色,所以这样我可以解决问题,但这个解决方案是令人讨厌的.希望这可以帮助.


Ole*_*ich 6

只需在文本末尾添加一个额外的空格即可.在XML中,您必须添加\u0020到最后,否则XML默认忽略开头/结尾的空格.


kam*_*ych 6

找到了另一个解决方案(在使用 4.1.2 和 4.3 时测试wrap_content)。如果您扩展TextViewEditText类,您可以通过onMeasure这种方式覆盖方法:

@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    final int measuredWidth = getMeasuredWidth();
    final float tenPercentOfMeasuredWidth = measuredWidth * 0.1f;
    final int newWidth = measuredWidth + (int) tenPercentOfMeasuredWidth;

    setMeasuredDimension(newWidth, getMeasuredHeight());
}
Run Code Online (Sandbox Code Playgroud)


Fra*_*yen 5

您可以在字符串中添加一个 HAIR SPACE

<string name="hair_space">&#x200A;</string>

String hairSpace = getContext().getString(R.string.hair_space);
textView.setText(hairSpace + originalString + hairSpace)
Run Code Online (Sandbox Code Playgroud)