Subscript and Superscript a String in Android

JavaAndroidStringSuperscriptSubscript

Java Problem Overview


How can you print a string with a subscript or superscript? Can you do this without an external library? I want this to display in a TextView in Android.

Java Solutions


Solution 1 - Java

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

or

Common Tasks and How to Do Them in Android

Solution 2 - Java

Example:

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);

Solution 3 - Java

To all people asking, if you want to make it smaller besides of making super or subscript, you just need to add tag as well. EX:

"X <sup><small> 2 </small></sup>"

Solution 4 - Java

In the code just put this "\u00B2" Like this:

textView.setText("X\u00B2");

Solution 5 - Java

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

(or) From String Resource File:

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

Solution 6 - Java

It bit late but following just work fine, use superscript as special character, I used spacial char here.

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

Solution 7 - Java

The Accepted answer is deprecated now. So please go through this piece of code. I got this from some website. I forgot the name but anyway thanks for this good piece of working code.

     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);

Note : Always put android:textAllCaps="false" of your spantext.

Solution 8 - Java

If you want to set the superscript from string.xml file try this:

string resource:

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

if you want the superscript to be smaller:

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

Code:

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

Solution 9 - Java

The HTML.fromHTML(String) was deprecated as of API 24. They say to use this one instead, which supports flags as a parameter. So to go off of the accepted answer:

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

And if you want code that considers pre-24 API's as well:

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>"));    
}

This answer was derived from: https://stackoverflow.com/a/37905107/4998704

The flags and other documentation can be found here: https://developer.android.com/reference/android/text/Html.html

Solution 10 - Java

Android String Resource Superscript and Subscript for letters

You don't really have to use html document if any of the letters you want is represented here

For "a" copy and paste this "ᵃ"

You can copy and paste any of these Superscripts and Subscripts directly into your Android String Resource.

Example:

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

Result:Trademark ᵀᴹ

Superscript and Subscript letters

Superscript capital ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴼ ᴾ ᴿ ᵀ ᵁ ⱽ ᵂ

Superscript minuscule ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ ⁱ ʲ ᵏ ˡ ᵐ ⁿ ᵒ ᵖ ʳ ˢ ᵗ ᵘ ᵛ ʷ ˣ ʸ ᶻ

Subscript minuscule ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₜ ᵤ ᵥ ₓ

Solution 11 - Java

I found this article on how to use a Spannable or in a string resource file: <sup> or <sub> for superscript and subscript, respectively.

Solution 12 - Java

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 -> ""
}

}

Solution 13 - Java

In the strings.xml files, you can just use the HTML <sup>3</sup> tag. Work perfectly for me

EXAMPLE

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

Solution 14 - Java

They are called Unicode characters, and Android TextView supports them. Copy the super/sub-script you want from this Wiki: https://en.wikipedia.org/wiki/List_of_Unicode_characters#Superscripts_and_Subscripts

Solution 15 - Java

yourTextView.setText(Html.fromHtml("X<sup>2</sup>"));

This will be the result in you yourTextView =

X2

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMohit DeshpandeView Question on Stackoverflow
Solution 1 - JavaKonstantin BurovView Answer on Stackoverflow
Solution 2 - JavapeterView Answer on Stackoverflow
Solution 3 - JavaAriel CapozzoliView Answer on Stackoverflow
Solution 4 - JavaGerardo Salazar SánchezView Answer on Stackoverflow
Solution 5 - Javam.v.n.kalyaniView Answer on Stackoverflow
Solution 6 - JavaCoDeView Answer on Stackoverflow
Solution 7 - JavaAMAN SINGHView Answer on Stackoverflow
Solution 8 - JavaCésar CoboView Answer on Stackoverflow
Solution 9 - JavaJustin LiuView Answer on Stackoverflow
Solution 10 - JavaJEREMIAH SYLVESTERView Answer on Stackoverflow
Solution 11 - JavaMohit DeshpandeView Answer on Stackoverflow
Solution 12 - JavaBoyView Answer on Stackoverflow
Solution 13 - JavaDetiliumView Answer on Stackoverflow
Solution 14 - JavaAditya NaiqueView Answer on Stackoverflow
Solution 15 - Javaンドリュー ライアンアView Answer on Stackoverflow