Subscript e Superscript a String no Android


Respostas:


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

ou

Tarefas comuns e como fazê-las no Android


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

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


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

11

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

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

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>

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.


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


3

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


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 ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₛ ₜ ᵤ ᵥ ₓ


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>


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.