下标和上标是Android中的字符串


Answers:


159
((TextView)findViewById(R.id.text)).setText(Html.fromHtml("X<sup>2</sup>"));

要么

常见任务以及如何在Android中执行任务


3
从技术上讲,它不支持HTML,而是创建了TextViews支持的Spanned。本质上是具有样式信息的CharSequences。
丹德·艾里森

1
这对我不起作用...但是可能是因为我将其设置在我的strings.xml文件中。它为我下标它,但是它修剪了它,无论我总是修剪多少填充。
JPM 2012年

解析这个html疯了吗?
A. Steenbergen 2014年

10
答案链接似乎不再相关。

3
感谢您这样做,但是下面使用SpannableStringBuilder的答案要好得多。
Zach Sperske '16

105

例:

equation = (TextView) findViewById(R.id.textView1);
SpannableStringBuilder cs = new SpannableStringBuilder("X3 + X2");
cs.setSpan(new SuperscriptSpan(), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
cs.setSpan(new RelativeSizeSpan(0.75f), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
cs.setSpan(new SuperscriptSpan(), 6, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
cs.setSpan(new RelativeSizeSpan(0.75f), 6, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
equation.setText(cs);

1
实际上看起来不错,谢谢分享!Html.fromHTML()方法很方便,但是上标并不小。
Daniel Schuler 2013年

这样更好!Html.fromHtml方法可能导致上标文本被截断。
Zach Sperske'8

当我使用这种方法说100平方米时,equation.setText(blah+cs);它不起作用。单独工作正常。如何获得这项工作?
没人

远胜过Html.fromHtml()方法
科学的




11

如果要从string.xml文件设置上标,请尝试以下操作:

字符串资源:

<string name="test_string">X&lt;sup&gt;3&lt;/sup&gt;</string>

如果您希望上标更小:

<string name="test_string">X&lt;sup&gt;&lt;small&gt;3&lt;/small&gt;&lt;/sup&gt;</string>

码:

textView.setText(Html.fromHtml("Anything you want to put here"+getString(R.string.test_string)));

11

有点晚了,但随后工作正常,使用上标作为特殊字符,我在这里使用了空格字符。

<string name="str">H₂</string>

10
((TextView)findViewById(R.id.text)).setText(Html.fromHtml("X<sup><small>2</small></sup>")); 

(或)从字符串资源文件:

<string name="test_string">
  <![CDATA[ X<sup><small>2</small></sup> ]]>
</string>

我是新手,但当时dnt知道如何使用。
mvnkalyani

8

现在已弃用已接受的答案。因此,请仔细阅读这段代码。我是从某个网站上获得的。我忘记了名称,但是无论如何都要感谢这段出色的工作代码。

     SpannableString styledString
            = new SpannableString("Large\n\n"     // index 0 - 5
            + "Bold\n\n"          // index 7 - 11
            + "Underlined\n\n"    // index 13 - 23
            + "Italic\n\n"        // index 25 - 31
            + "Strikethrough\n\n" // index 33 - 46
            + "Colored\n\n"       // index 48 - 55
            + "Highlighted\n\n"   // index 57 - 68
            + "K Superscript\n\n" // "Superscript" index 72 - 83 
            + "K Subscript\n\n"   // "Subscript" index 87 - 96
            + "Url\n\n"           //  index 98 - 101
            + "Clickable\n\n");   // index 103 - 112

    // make the text twice as large
    styledString.setSpan(new RelativeSizeSpan(2f), 0, 5, 0);

    // make text bold
    styledString.setSpan(new StyleSpan(Typeface.BOLD), 7, 11, 0);

    // underline text
    styledString.setSpan(new UnderlineSpan(), 13, 23, 0);

    // make text italic
    styledString.setSpan(new StyleSpan(Typeface.ITALIC), 25, 31, 0);

    styledString.setSpan(new StrikethroughSpan(), 33, 46, 0);

    // change text color
    styledString.setSpan(new ForegroundColorSpan(Color.GREEN), 48, 55, 0);

    // highlight text
    styledString.setSpan(new BackgroundColorSpan(Color.CYAN), 57, 68, 0);

    // superscript
    styledString.setSpan(new SuperscriptSpan(), 72, 83, 0);
    // make the superscript text smaller
    styledString.setSpan(new RelativeSizeSpan(0.5f), 72, 83, 0);

    // subscript
    styledString.setSpan(new SubscriptSpan(), 87, 96, 0);
    // make the subscript text smaller
    styledString.setSpan(new RelativeSizeSpan(0.5f), 87, 96, 0);

    // url
    styledString.setSpan(new URLSpan("http://www.google.com"), 98, 101, 0);

    // clickable text
    ClickableSpan clickableSpan = new ClickableSpan() {

        @Override
        public void onClick(View widget) {
            // We display a Toast. You could do anything you want here.
            Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show();

        }
    };

    styledString.setSpan(clickableSpan, 103, 112, 0);


    // Give the styled string to a TextView
    spantext = (TextView) findViewById(R.id.spantext);


    // this step is mandated for the url and clickable styles.
    spantext.setMovementMethod(LinkMovementMethod.getInstance());

    // make it neat
    spantext.setGravity(Gravity.CENTER);
    spantext.setBackgroundColor(Color.WHITE);

    spantext.setText(styledString);

注意:始终android:textAllCaps="false"保留您的文本。


4

从API 24开始不推荐使用HTML.fromHTML(String)。他们说改为使用此代码,它支持标志作为参数。因此,离开公认的答案:

TextView textView = ((TextView)findViewById(R.id.text));
textView.setText(Html.fromHtml("X<sup>2</sup>", Html.FROM_HTML_MODE_LEGACY));

并且,如果您还需要考虑24年前的API的代码:

TextView textView = ((TextView)findViewById(R.id.text));
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
  textView.setText(Html.fromHtml("X<sup>2</sup>", Html.FROM_HTML_MODE_LEGACY));
} else {
    textView.setText(Html.fromHtml("X<sup>2</sup>"));    
}

这个答案来自:https : //stackoverflow.com/a/37905107/4998704

标志和其他文档可以在这里找到:https : //developer.android.com/reference/android/text/Html.html



0

strings.xml文件中,您可以仅使用HTML <sup>3</sup>标记。为我完美地工作

<string name="turnoverRate">Turnover rate m<sup>3</sup>/m<sup>2</sup>/hour:</string>


0

字母的Android字符串资源上标和下标

如果您想要的任何字母都显示在此处,则您实际上不必使用html文档。

对于“ a”,请复制并粘贴此“ᵃ”

您可以将任何这些上标和下标直接复制并粘贴到您的Android字符串资源中。

例:

    <string name="word_with_superscript" translatable="false">Trademark ᵀᴹ</string>

结果:商标ᵀᴹ

上标和下标字母

上标大写 字母capital capital capital capital capital capital capital

上标minuscule usᶜ

下标minuscule scriptₕ


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.