Subscript e Superscript a String no Android

104

Como você pode imprimir uma string com um subscrito ou sobrescrito? Você pode fazer isso sem uma biblioteca externa? Quero que isso seja exibido em um TextViewAndroid.

Mohit Deshpande
fonte
use [este] [1] truque no listview e em seu textview. [1]: stackoverflow.com/a/22105902/1350021
Omid Omidi

Respostas:

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

ou

Tarefas comuns e como fazê-las no Android

Konstantin Burov
fonte
3
Tecnicamente, não é compatível com HTML, isto é, criando um Spanned, que TextViews oferece suporte. Essencialmente CharSequences com informações de estilo.
Dandre Allison de
1
Isso não funciona para mim ... mas talvez seja porque eu configurei dentro do meu arquivo strings.xml. Ele é subscrito para mim, mas ele o prende e não importa quanto preenchimento eu coloquei, ele sempre será cortado.
JPM de
Analisar este html não é incrivelmente caro?
A. Steenbergen
11
O link na resposta não parece mais relevante.
Pang
3
Obrigado por isso, mas a resposta abaixo usando um SpannableStringBuilder é muito melhor.
Zach Sperske de
105

Exemplo:

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);
Peter
fonte
1
Isso realmente parece certo, obrigado por compartilhar! O método Html.fromHTML () é conveniente, mas o sobrescrito não é menor.
Daniel Schuler de
Assim é bem melhor! O método Html.fromHtml pode fazer com que o texto sobrescrito seja cortado.
Zach Sperske de
Quando eu uso este método gosto de dizer que 100 metros quadrados equation.setText(blah+cs);ele não funciona. Funciona bem separadamente. Como conseguir esse trabalho?
Ninguém
Muito melhor do que o método Html.fromHtml ()
científico
Por favor, adicione a explicação
Aryeetey Solomon Aryeetey
48

Para todas as pessoas perguntando, se você quiser torná-lo menor além de fazer super ou subscrito, você só precisa adicionar a tag também. EX:

"X <sup><small> 2 </small></sup>"
Ariel Capozzoli
fonte
15

No código basta colocar este "\ u00B2" Assim:

textView.setText("X\u00B2");

Gerardo Salazar Sánchez
fonte
Olá, sua resposta foi muito útil. No entanto, qual código pode ser usado para subscrito? Além disso, como esses códigos são chamados se eu o procuro no Google, eles são unicodes?
Kolaaa
Olá, sim, é unicode, aqui está um PDF com todos os unicodes unicode.org/charts/PDF/U2070.pdf
Gerardo Salazar Sánchez
Obrigado. Muito simples.
Izak
11

Se você deseja definir o sobrescrito do arquivo string.xml, tente o seguinte:

recurso de string:

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

se você quiser que o sobrescrito seja menor:

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

Código:

textView.setText(Html.fromHtml("Anything you want to put here"+getString(R.string.test_string)));
César Cobo
fonte
11

É um pouco tarde, mas seguindo apenas funciona bem, use sobrescrito como caractere especial, usei spacial char aqui.

<string name="str">H₂</string>
Código
fonte
11
((TextView)findViewById(R.id.text)).setText(Html.fromHtml("X<sup><small>2</small></sup>")); 

(ou) Do arquivo de recurso de string:

<string name="test_string">
  <![CDATA[ X<sup><small>2</small></sup> ]]>
</string>
mvnkalyani
fonte
eu sou novo para empilhar o fluxo, naquela época não sei como usar.
mvnkalyani
8

A resposta aceita está obsoleta agora. Então, por favor, leia este trecho de código. Peguei isso em algum site. Esqueci o nome, mas de qualquer forma, obrigado por este bom código de trabalho.

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

Nota: Sempre coloque android:textAllCaps="false"de seu spantext.

AMAN SINGH
fonte
4

O HTML.fromHTML (String) tornou-se obsoleto a partir da API 24. Eles dizem para usar este, que oferece suporte a sinalizadores como parâmetro. Então, para sair da resposta aceita:

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

E se você quiser um código que considere APIs anteriores aos 24 anos também:

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

Esta resposta foi derivada de: https://stackoverflow.com/a/37905107/4998704

Os sinalizadores e outras documentações podem ser encontrados aqui: https://developer.android.com/reference/android/text/Html.html

Justin Liu
fonte
3

Encontrei este artigo sobre como usar um Spannableou em um arquivo de recurso de string: <sup>ou <sub>para sobrescrito e subscrito, respectivamente.

Mohit Deshpande
fonte
6
O link na resposta não parece mais relevante.
Pang
1

Android String Resource Superscript e Subscript para letras

Você realmente não precisa usar o documento html se alguma das letras que deseja estiver representada aqui

Para "a", copie e cole este "ᵃ"

Você pode copiar e colar qualquer um desses Superscripts e Subscripts diretamente no seu Android String Resource.

Exemplo:

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

Resultado: Marca Registrada ᵀᴹ

Letras sobrescritas e subscritas

Sobrescrito maiúsculo ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴼ ᴾ ᴾ ᴿ ᵀ ᵁ ⱽ ᵂ

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

Subscrito minúsculo ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₛ ₜ ᵤ ᵥ ₓ

JEREMIAH SYLVESTER
fonte
0

Nos strings.xmlarquivos, você pode apenas usar a <sup>3</sup>tag HTML . Funciona perfeitamente para mim

EXEMPLO

<string name="turnoverRate">Turnover rate m<sup>3</sup>/m<sup>2</sup>/hour:</string>
Detilium
fonte
-1
yourTextView.setText(Html.fromHtml("X<sup>2</sup>"));

This will be the result in you yourTextView =

X 2

ン ド リ ュ ー ラ イ ア ン ア
fonte