Android文本视图';s的下标被剪掉了

Android文本视图';s的下标被剪掉了,android,textview,subscript,Android,Textview,Subscript,即使在我对文本视图使用Android:layout\u height=“wrap\u content”时,Android文本视图也会删除我的文本下标(见下图)。 是否有解决方法 附言:上标很好用 注意:填充不起作用 我甚至试着添加一个50度的填充物,但没有效果 我可以使用绝对高度,如50度,但当我需要文字环绕时,这会把一切都搞糟 示例代码: mtTextView.setText(Html.fromHtml(“HC03”)对我有用 当浏览器呈现上标文本时,上标文本通常会变小,这在这里似乎不

即使在我对文本视图使用
Android:layout\u height=“wrap\u content”
时,Android文本视图也会删除我的文本下标(见下图)。 是否有解决方法

附言:上标很好用

注意:填充不起作用

  • 我甚至试着添加一个50度的填充物,但没有效果
  • 我可以使用绝对高度,如50度,但当我需要文字环绕时,这会把一切都搞糟
示例代码:

mtTextView.setText(Html.fromHtml(“HC03”)

对我有用

当浏览器呈现上标文本时,上标文本通常会变小,这在这里似乎不会发生,因此您可以通过执行以下操作复制它(并解决此问题):

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

我正在显示分数和混合数,所以我同时使用超级和订阅。Html.fromHtml对我不起作用,它要么剪掉了顶部,要么剪掉了底部

奇怪的是,混合数工作正常,但分数本身却不行

最后,我使用了一个带有下标span或上标span的SpannableString,然后在TextAppearanceSpan中设置字体大小

一旦我这样做了,我还必须扩展文本视图的高度

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返回显示元素数组中最大字符串的边框

分数调整是一个经验选择的值,适用于根据屏幕几何结构调整的选定字体大小

注意:这是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());

对于下标,需要对上述建议稍作修改,两个小标记:

    textView.setText(Html.fromHtml(
        "HCO<sub><small><small>3</small></small></sub>));
textView.setText(Html.fromHtml(
“HCO3”);
android:lineSpacingExtra=“4dp”应该可以解决这个问题
这将在文本下方增加额外的行距,并防止下标被截断。我还没有尝试使用上标,所以现在可能会解决这个问题。

我在ICS和android版本以下遇到过同样的问题。我通过一个简单的步骤解决了这个问题

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

可以通过xml设置最小高度

        android:minHeight="30dp"
或者动态地

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

            tv.setMinHeight(52);
    }
if(android.os.Build.VERSION.SDK\u INT
其中的标记越多,下标越小,您应该能够在不被剪裁的情况下看到它

例如:H2O

Html.fromHtml(“H2O”);

大多数答案建议添加填充物或使用较小的子/上标。这些可能是可行的解决办法,但它们并不能真正解决问题。理想情况下,我们希望Android在计算线条高度时考虑子/上标。我想我找到了方法,我正在为谷歌搜索此问题的人分享

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

技巧在于BufferType.SPANNABLE。显然,它让TextView更加关注标记并正确计算行高。

我也有同样的问题,所以在阅读文章后,我发现这是可行的

示例:H2O
只需使用:

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

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

这与小标签一起对我有效

  • 在文本视图中添加
  • android:paddingBottom=“1dp”

  • 在下标后面使用小标记
  • yourTextView.setText(Html.fromHtml(“+”嘿2”)

    注意请注意,第一步很重要,我的文本在某些情况下仍在缩减,使用paddingBottom解决了这个问题。
    别忘了删除我的答案中存在的子标记和小标记中的空格:)

    你能尝试粘贴代码吗?mtTextView.setText(Html.fromHtml(“HC03”));未来读者注意-bug是作者提交给android bugtracker的,你可以添加一个开始来提高它的优先级这对我来说不起作用…但可能是因为我在strings.xml文件中设置了它。它为我订阅了它,但它会对它进行剪辑,无论我放了多少填充,它都会被剪辑。你能展示一下CalcSize函数的样子吗e和分数调整,fractionFontSize变量。不确定你的经验选择值是什么意思。你能给出一个具体的值吗?我会看看这个答案,而不是嵌套的数字““取决于文本的大小。我通过添加3X来摆脱剪辑效果,无需添加多个小标记。只需在文本视图中添加android:paddingBottom=“2dp”。这对我来说非常有效。嘿,我的字符串为
    X2 X3 X4
    ,在我的情况下不起作用。我只使用
    SuperscriptSpan()
    textView.setText(Html.fromHtml("H<sub>2</sub>O"),BufferType.SPANNABLE);
    
     textView.setText(Html.fromHtml(data, null, new CustomHtmlTagHandler(),BufferType.SPANNABLE);