带有wrap_contents的斜体TextView似乎将文本夹在右边缘

<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" /> 

似乎从最右边的字符剪辑几个像素,至less在480×800仿真器或Nexus One上。

对我来说,它看起来像一个错误,但我只是一个Android初学者。 我试图左右添加边距,但仍然保持裁剪状态。 最后,我对它的攻击是在文本的两边添加一个空格。 任何其他解决scheme

android:layout_width="wrap_content" ,给你一个包装内容呈现的矩形。 对于正常文本(非斜体),所有这些都可以正常工作。

一旦启用了italic文本,封装的文本将尝试装入矩形,因此最右边的字符将被截断,除非其不可剪切(例如. )1等)

build议的解决scheme是在文本末尾有一个空格(或者更好的东西?)

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

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

我在我的strings.xml中添加了" \"以结束所有string。 \是转义字符,所以这样我可以过来的问题,但这个解决scheme是讨厌的。 希望这可以帮助。

只需在文本的末尾添加一个额外的空间。 在XML中,您必须将\u0020添加到结尾,否则默认情况下,XML将忽略开始/结尾处的空白。

find了另一个解决scheme(使用wrap_content在4.1.2和4.3上testing)。 如果你扩展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()); } 

这也适用于固定宽度的TextView,而不仅仅是“wrap_content”。 我不确定这个问题是否与某些评论者所指的版本相关。 我看到所有Honeycomb版本的问题。 从我所看到的问题不会通过设置边距,填充,使用固定宽度或真正的定制字体消失。

看着源头,我发现设置一个阴影扩展了剪辑矩形。

一个诀窍就是在angular色之外设置一个看不见的影子。

例如:

 android:shadowRadius="2" android:shadowDx="2" android:shadowColor="#00000000" 

我认为这个解决scheme更好,因为它不会扩展TextView的宽度,当添加一个额外的字符(这在背景中更明显)时可能会发生这种情况。

你可以添加一个HAIR SPACE到你的string

 <string name="hair_space">&#x200A;</string> String hairSpace = getContext().getString(R.string.hair_space); textView.setText(hairSpace + originalString + hairSpace) 

在TextView的右边添加一个3dp填充。 我尝试了1dp和2dp,但3dp似乎完全做到了这一招。

android:paddingRight="3dp"

这是我的解决scheme:格式textview和度量。 之后,设置1像素的textview宽度添加到测量的宽度。

 TextView textView = new TextView(this); textView.setText("Text blah blah"); textView.setTypeface(typeface, Typeface.BOLD_ITALIC) textView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); textView.setLayoutParams(new LayoutParams(textView.getMeasuredWidth() + 1, LayoutParams.WRAP_CONTENT)); 

为我工作。 希望这些帮助。

Interesting Posts