Android中的下标和上标字符串

Moh*_*nde 96 java string android superscript subscript

如何打印带有下标或上标的字符串?没有外部库,你能做到吗?我希望这能TextView在Android中显示.

Kon*_*rov 149

((TextView)findViewById(R.id.text)).setText(Html.fromHtml("X<sup>2</sup>"));
Run Code Online (Sandbox Code Playgroud)

要么

常见任务及其在Android中的应用

  • 答案中的链接似乎不再相关. (9认同)
  • 它在技术上不支持HTML,即创建一个跨文本,TextViews支持.基本上CharSequences与样式信息. (3认同)
  • 感谢您这样做,但是下面使用SpannableStringBuilder的答案要好得多。 (2认同)

小智 100

例:

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);
Run Code Online (Sandbox Code Playgroud)

  • 这看起来确实不错,谢谢分享!Html.fromHTML() 方法很方便,但上标并不小。 (2认同)

Ari*_*oli 45

对于所有人来说,除了制作超级或下标之外,如果你想让它更小,你只需要添加标签.EX:

"X <sup><small> 2 </small></sup>"
Run Code Online (Sandbox Code Playgroud)


小智 11

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

字符串资源:

<string name="test_string">X&lt;sup&gt;3&lt;/sup&gt;</string>
Run Code Online (Sandbox Code Playgroud)

如果你想让上标更小:

<string name="test_string">X&lt;sup&gt;&lt;small&gt;3&lt;/small&gt;&lt;/sup&gt;</string>
Run Code Online (Sandbox Code Playgroud)

码:

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


CoD*_*oDe 11

它有点晚了,但只是工作正常,使用上标作为特殊字符,我在这里使用了空间字符.

<string name="str">H?</string>
Run Code Online (Sandbox Code Playgroud)


Ger*_*hez 11

在代码中只是把这个"\ u00B2"这样:

textView.setText("X\u00B2");


m.v*_*ani 10

((TextView)findViewById(R.id.text)).setText(Html.fromHtml("X<sup><small>2</small></sup>")); 
Run Code Online (Sandbox Code Playgroud)

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

<string name="test_string">
  <![CDATA[ X<sup><small>2</small></sup> ]]>
</string>
Run Code Online (Sandbox Code Playgroud)


AMA*_*NGH 7

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

     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);
Run Code Online (Sandbox Code Playgroud)

注意:始终放置android:textAllCaps="false"spantext.


小智 6

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

\n

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

\n

对于“a”,复制并粘贴此“\xe1\xb5\x83”

\n

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

\n

例子:

\n
    <string name="word_with_superscript" translatable="false">Trademark \xe1\xb5\x80\xe1\xb4\xb9</string>\n
Run Code Online (Sandbox Code Playgroud)\n

结果:商标\xe1\xb5\x80\xe1\xb4\xb9

\n

上标和下标字母

\n

上标大写 \xe1\xb4\xac \xe1\xb4\xae \xe1\xb4\xb0 \xe1\xb4\xb1 \xe1\xb4\xb3 \xe1\xb4\xb4 \xe1\xb4\xb5 \xe1\xb4\xb6 \xe1\xb4\xb7 \xe1\xb4\xb8 \xe1\xb4\xb9 \xe1\xb4\xba \xe1\xb4\xbc \xe1\xb4\xbe \xe1\xb4\xbf \xe1\xb5\x80 \xe1 \xb5\x81 \xe2\xb1\xbd \xe1\xb5\x82

\n

小写上标\xe1\xb5\x83 \xe1\xb5\x87 \xe1\xb6\x9c \xe1\xb5\x88 \xe1\xb5\x89 \xe1\xb6\xa0 \xe1\xb5\x8d \xca\xb0 \xe2 \x81\xb1 \xca\xb2 \xe1\xb5\x8f \xcb\xa1 \xe1\xb5\x90 \xe2\x81\xbf \xe1\xb5\x92 \xe1\xb5\x96 \xca\xb3 \xcb\xa2 \xe1\xb5\x97 \xe1\xb5\x98 \xe1\xb5\x9b \xca\xb7 \xcb\xa3 \xca\xb8 \xe1\xb6\xbb

\n

小写下标 \xe2\x82\x90 \xe2\x82\x91 \xe2\x82\x95 \xe1\xb5\xa2 \xe2\xb1\xbc \xe2\x82\x96 \xe2\x82\x97 \xe2\x82\x98 \xe2\x82\x99 \xe2\x82\x92 \xe2\x82\x9a \xe1\xb5\xa3 \xe2\x82\x9b \xe2\x82\x9c \xe1\xb5\xa4 \xe1\xb5\xa5 \xe2 \x82\x93

\n


Jus*_*Liu 5

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));
Run Code Online (Sandbox Code Playgroud)

如果您想要也考虑 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>"));    
}
Run Code Online (Sandbox Code Playgroud)

这个答案来自: /sf/answers/2653357521/

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