Android TextView的下标被剪掉了

即使我对TextView使用android:layout_height="wrap_content" ,Android TextView也会截断我的文本下标(见下图)。 有没有修复/解决方法?

替代文字http://sofzh.miximages.com/android/qy8n7m.png

P / S:上传文章工作正常

注意:填充不起作用。

  • 我甚至尝试添加50dip的填充但它没有帮助。
  • 我可以使用绝对高度,例如50dip,但是当我需要文本环绕时,这会混淆一切。

示例代码:

mtTextView.setText(Html.fromHtml("HC03"));

Solutions Collecting From Web of "Android TextView的下标被剪掉了"

这个解决方案对我有用。

当浏览器呈现时,上标文本通常会变小,这似乎不会发生在这里,所以你可以通过这样做来复制它(并解决这个问题):

 someTextView.setText(Html.fromHtml("Some text1")); 

大多数答案建议添加填充或使用较小的子/上标。 这些可能是可用的解决方法,但它们并没有真正解决问题。 理想情况下,我们希望Android在计算行高时考虑子/上标。 我想我已经find了如何做到这一点,而且我正在为谷歌搜索这个问题分享它。

  SpannableStringBuilder sb = new SpannableStringBuilder("X2"); sb.setSpan(new SuperscriptSpan(), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(sb, BufferType.SPANNABLE); 

诀窍在于BufferType.SPANNABLE。 显然它使TextView更加注意标记并正确计算线高。

对于下标,需要略微改变上述建议,两个小标签:

  textView.setText(Html.fromHtml( "HCO3)); 

android:lineSpacingExtra =“4dp”应该解决它,这将在你的文本下方添加额外的行间距,并保持下标不被截止。 我没有尝试过上标,所以它现在可以修复它。

我有同样的问题,所以在阅读post后,我发现这是有效的。

示例:H 2 O.
只需使用:

 textView.setText(Html.fromHtml("H2O"),BufferType.SPANNABLE); 

BufferType.SPANNABLE非常重要,因为它会告诉textview考虑上标范围。

如果您使用HTML的自定义标记处理程序,您也可以像这样使用它:

  textView.setText(Html.fromHtml(data, null, new CustomHtmlTagHandler(),BufferType.SPANNABLE); 

希望它能帮助某人寻找同样的问题。

我正在显示分数和混合数字,所以我同时使用超级和下标。 Html.fromHtml对我不起作用,它要么截断了顶部或底部。

奇怪的是,混合数字正常工作,但分数本身没有。

我最终使用带有SubscriptSpan或SuperscriptSpan的SpannableString,然后在TextAppearanceSpan中设置字体大小。

完成后我必须扩展TextView的高度。

 TextView number = (TextView)findViewById(R.id.number); String temp = "1 1/2"; SpannableString s = new SpannableString(temp); // if the string has a fraction in it, superscript the numerator and subscript the denominator if (temp.indexOf('/') != -1) { int len = temp.length(); s.setSpan(new SuperscriptSpan(), len - 3, len - 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); s.setSpan(new TextAppearanceSpan(null, 0, fractionFontSize, null, null), len - 3, len - 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); s.setSpan(new TextAppearanceSpan(null, 0, fractionFontSize, null, null), len - 2, len - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); s.setSpan(new SubscriptSpan(), len - 1, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); s.setSpan(new TextAppearanceSpan(null, 0, fractionFontSize, null, null), len - 1, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } number.setText(s); 

然后我不得不扩大高度:

 RelativeLayout.LayoutParams parms = (RelativeLayout.LayoutParams)number.getLayoutParams(); Rect frame = CalcSize(number.getTextSize(), quantityMaxString); parms.height = frame.height() + fractionAdjustment; number.setLayoutParams(parms); 

CalcSize返回显示元素数组中最大字符串的边界矩形。

fractionAdjustment是一个经过术语选择的值,适用于为屏幕几何调整的所选字体大小。

注意:这是TextView在ListView中,因此可能也会产生一些影响。

 // calculate the field dimensions, given the font size and longest string private static Rect CalcSize(float fontSize, String maxString) { Rect bounds = new Rect(); paint.setTypeface(Typeface.DEFAULT); paint.setTextSize(fontSize); paint.getTextBounds(maxString, 0, maxString.length(), bounds); return bounds; } 

经验值:

 fractionAdjustment = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 14, resources.getDisplayMetrics()); fractionFontSize = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 11, resources.getDisplayMetrics()); 

我在ICS和Android版本下面临同样的问题。 我通过一个简单的步骤解决了这个问题

为文本视图指定最小高度。 它将解决问题。

您可以通过xml设置最小高度。

  android:minHeight="30dp" 

或动态

  if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { tv.setMinHeight(52); } 

这对我和标签一起工作。

  1. 在TextView里面添加

机器人:paddingBottom来= “1DP”

  1. 在下标后面使用小标签

yourTextView.setText(Html.fromHtml(“”+“Hey 2 ”));

注意请注意,第1步很重要,我的文本在某些情况下仍在减少,使用paddingBottom解决它。 不要忘记删除我的答案中存在的子标记和小标记中的空格:)

那里有更多 标签,下标得到的越小,你应该能够看到它而不被剪裁。

例如:H 2 O.

 Html.fromHtml("H2O");