108

如何打印带有下标或上标的字符串?你可以在没有外部库的情况下做到这一点吗?我希望它显示TextView在 Android 中。

4

15 回答 15

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

或者

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

于 2010-08-22T22:04:22.987 回答
112

例子:

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);
于 2012-01-15T20:13:09.793 回答
51

对于所有询问的人,如果除了制作上标或下标之外,您还想使其更小,您只需添加标签即可。前任:

"X <sup><small> 2 </small></sup>"
于 2013-05-03T15:27:11.023 回答
21

在代码中只要把这个“\u00B2”像这样:

textView.setText("X\u00B2");

于 2018-02-14T19:02:49.007 回答
13

有点晚了,但接下来工作正常,使用上标作为特殊字符,我在这里使用了空间字符。

<string name="str">H₂&lt;/string>
于 2015-05-12T09:52:29.727 回答
13

已接受的答案现在已弃用。所以请仔细阅读这段代码。我从某个网站得到这个。我忘记了名字,但无论如何感谢这段好的工作代码。

     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"您的跨度文本。

于 2017-02-08T11:59:04.370 回答
12
((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>
于 2015-04-04T09:45:48.600 回答
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)));
于 2014-09-03T20:35:02.090 回答
4

HTML.fromHTML(String) 自 API 24 起已弃用。他们说要改用这个,它支持标志作为参数。所以要放弃接受的答案:

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

如果您还想要考虑 pre-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

于 2016-10-17T05:21:22.173 回答
4

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

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

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

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

例子:

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

结果:商标ᵀᴹ</p>

上标和下标字母

上标大写 ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴼ ᴾ ᴿ ᵀ ᵁ ⱽ ᵂ</p>

上标小写ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ ⁱ ʲ ᵏ ˡ ᵐ ⁿ ᵒ ᵖ ʳ ˢ ᵗ ᵘ ᵛ ʷ ˣ ʸ ᶻ</p>

下标小写 ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓ</p>

于 2019-11-10T08:35:01.957 回答
3

我发现这篇关于如何Spannable在字符串资源文件中使用或的文章:<sup><sub>分别用于上标和下标。

于 2010-08-22T22:01:24.810 回答
1

Based on Gerardo's answer here I created this extension on Int

fun Int.toSuperScript(): String {
    return when (this) {
        0 -> "\u2070"
        1 -> "\u00B9"
        2 -> "\u00B2"
        3 -> "\u00B3"
        4 -> "\u2074"
        5 -> "\u2075"
        6 -> "\u2076"
        7 -> "\u2077"
        8 -> "\u2078"
        9 -> "\u2079"
        else -> ""
}

}

于 2020-11-06T05:51:18.663 回答
0

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

例子

<string name="turnoverRate">Turnover rate m<sup>3</sup>/m<sup>2</sup>/hour:</string>
于 2015-07-22T07:54:46.530 回答
0

它们被称为 Unicode 字符,AndroidTextView支持它们。从此 Wiki 复制您想要的超级/子脚本:https ://en.wikipedia.org/wiki/List_of_Unicode_characters#Superscripts_and_Subscripts

于 2015-09-04T13:15:10.713 回答
-1
yourTextView.setText(Html.fromHtml("X<sup>2</sup>"));

This will be the result in you yourTextView =

X 2

于 2016-02-23T04:01:14.693 回答