<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"
/>
似乎从最右边的角色剪辑几个像素,至少在480x800模拟器或Nexus One上。
对我而言,它看起来像一个bug,但我只是一个Android初学者。 我试图向左右添加边距,但它仍然保持裁剪。 最后,我的黑客是在文本的两边添加一个空格。 还有其他解决方案吗?
答案 0 :(得分:21)
您也可以使用Unicode no-break space character(\ u00A0)。
答案 1 :(得分:20)
android:layout_width="wrap_content"
,为包装内容呈现提供一个矩形。
一切都适用于普通文本(非斜体)。
启用italic
文本后,包装的文本将尝试适合矩形,因此最右边的字符将被切除,除非其不可切割(例如.
,{ {1}},)
等。)
建议的解决方案是在文本的末尾有一个空格(或者更好的??)
PS: 这也适用于1
因为文本会被推到最右边。如果我们有android:gravity="right"
文字,我们会面临同样的问题。
答案 2 :(得分:12)
我将" \"
添加到strings.xml中所有字符串的末尾。 \
是转义字符,所以这样我可以解决这个问题,但这个解决方案很讨厌。希望这会有所帮助。
答案 3 :(得分:6)
只需在文本末尾添加一个额外的空格即可。在XML中,您必须将\u0020
添加到结尾,否则XML默认会忽略开头/结尾处的空格。
答案 4 :(得分:4)
找到另一个解决方案(在使用wrap_content
时在4.1.2和4.3上测试)。如果您延长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());
}
答案 5 :(得分:3)
您可以为字符串添加头发空间
<string name="hair_space"> </string>
String hairSpace = getContext().getString(R.string.hair_space);
textView.setText(hairSpace + originalString + hairSpace)
答案 6 :(得分:2)
这也适用于固定宽度的TextViews,而不仅仅是“wrap_content”。我不确定这个问题是否是特定于版本的问题,正如一些评论者提到的那样。我看到所有Honeycomb版本的问题。从我所看到的问题不会通过设置边距,填充,使用固定宽度或真正的自定义字体来消除。
答案 7 :(得分:1)
查看源代码我发现设置阴影会扩展剪辑矩形。
一个技巧是在角色之外设置一个不可见的阴影。
例如:
android:shadowRadius="2"
android:shadowDx="2"
android:shadowColor="#00000000"
我认为这个解决方案更好,因为它不会扩展添加额外字符时可能发生的TextView
的宽度(在背景中更明显)。
答案 8 :(得分:1)
这是我的解决方案:格式化textview和度量。在设置了textview的宽度后,用1个像素添加到测量的宽度。
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));
为我工作。希望这些帮助。
答案 9 :(得分:0)
我也遇到了同样的问题,并通过HTML使用了不间断的空间实体:
textView.setText("Magnifico" + Html.fromHtml(" ");
答案 10 :(得分:0)
适当且干净的解决方案:
使用斜体自定义字体,而不是设置textStyle ='italic' 例如:
<android.support.v7.widget.AppCompatTextView
android:text="yolO"
app:fontFamily="@font/roboto_italic"/>
我没有在常规TextView上尝试过它,但是从我的观察来看,问题出在textStyle ='italic'。
可以正常工作!
以下是归咎于textStyle属性的证明:
我制作了一个自定义fontFamily,并为普通字体,粗体字体和斜体字体定义了字体
res / font / app_font_family.xml
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font app:fontStyle="normal" app:fontWeight="400" app:font="@font/roboto_regular"/>
<font app:fontStyle="italic" app:fontWeight="400" app:font="@font/roboto_italic" />
<font app:fontStyle="normal" app:fontWeight="700" app:font="@font/roboto_medium"/>
</font-family>
现在,当我使用此fontFamily并应用textStyle ='italic'时,最右边的字符仍会被剪切。
<android.support.v7.widget.AppCompatTextView
android:text="yolO"
app:fontFamily="@font/app_font_family"
android:textStyle='italic' />
这是在Api 23上,带有支持库28.0.0和Android Studio 3.2
答案 11 :(得分:0)
在我看来,如果您以编程方式应用斜体字,则可以正确包装内容。因此请手动设置TextView的字体,例如在科特林:
textView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.ITALIC)
答案 12 :(得分:0)
虽然我通常更喜欢 sziraqui's answer 建议使用真正的斜体字体,但这些并不总是可用。
由于手头的问题是由文本边界的错误测量引起的,我只是设置了 android:layout_width="0dp"
,为 TextView 提供所需的水平空间。这在所有情况下也可能并不理想,但对于许多情况来说,这是一个简单且不太黑客的解决方案。
答案 13 :(得分:-1)
在TextView的右侧添加一个3dp填充。我尝试使用1dp和2dp,但3dp似乎完全可以完成这个技巧。
android:paddingRight="3dp"