带有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)。 如果你扩展TextView
或EditText
类,你可以通过这种方式覆盖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"> </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));
为我工作。 希望这些帮助。