Android TextView的下标被剪掉了

时间:2009-11-16 20:39:41

标签: android textview subscript

即使我使用android:layout_height="wrap_content"作为TextView,Android TextView也会剪切我的文本下标(见下图)。 是否有修复/解决方法?

alt text

P / S:上标文件正常

注意:填充不起作用。

  • 我甚至尝试添加 50dip 的填充,但它没有帮助。
  • 我可以使用绝对高度,例如 50dip 但是当我需要文字环绕时,这会让所有事情变得混乱。

示例代码:

mtTextView.setText(Html.fromHtml("HC0<sub>3</sub>"));

9 个答案:

答案 0 :(得分:19)

This solution为我工作。

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

someTextView.setText(Html.fromHtml("Some text<sup><small>1</small></sup>"));

答案 1 :(得分:17)

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

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

技巧在BufferType.SPANNABLE中。显然,它使TextView更加注重标记并正确计算线高。

答案 2 :(得分:10)

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

    textView.setText(Html.fromHtml(
        "HCO<sub><small><small>3</small></small></sub>));

答案 3 :(得分:10)

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

答案 4 :(得分:6)

我遇到了同样的问题,所以在阅读这些帖子后,我发现这个问题正在发挥作用。

示例:H 2 O
只需使用:

textView.setText(Html.fromHtml("H<sub>2</sub>O"),BufferType.SPANNABLE);

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

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

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

希望它有助于某人寻找同样的问题。

答案 5 :(得分:1)

我正在显示分数和混合数字,所以我同时使用超级和下标。 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());

答案 6 :(得分:1)

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

解决了这个问题

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

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

        android:minHeight="30dp"

或动态

 if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {

            tv.setMinHeight(52);
    }

答案 7 :(得分:1)

这对我来说与标签一起使用。

  1. 在TextView内添加
  2.   

    机器人:paddingBottom来= “1DP”

    1. 使用下标后面的小标记
    2.   

      yourTextView.setText(Html.fromHtml(“”+“Hey&lt; sub&gt;&lt; small&gt; 2&lt; / small&gt;&lt; / sub&gt;”));

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

答案 8 :(得分:0)

更多&lt; small&gt; &LT; /小&GT;那里的标签,下标得到的越小,你应该能够看到它而不被剪裁。

例如:H 2 O

Html.fromHtml("H<sub><small><small><small>2</small></small></small></sub>O");