Subíndice y superíndice una cadena en Android

Respuestas:

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

o

Tareas comunes y cómo realizarlas en Android

Konstantin Burov
fuente
3
Técnicamente no es compatible con HTML, es decir, está creando un Spanned, que TextViews sí admite. Esencialmente CharSequences con información de estilo.
Dandre Allison
1
Esto no funciona para mí ... pero tal vez sea porque lo configuré dentro de mi archivo strings.xml. Lo subíndice para mí, pero lo recorta y no importa cuánto relleno ponga, siempre lo recorta.
JPM
¿No es increíblemente caro analizar este HTML?
A. Steenbergen
10
El enlace en respuesta ya no parece relevante.
Pang
3
Gracias por esto, pero la respuesta a continuación usando un SpannableStringBuilder es mucho mejor.
Zach Sperske
105

Ejemplo:

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);
pedro
fuente
1
Esto realmente se ve bien, ¡gracias por compartir! El método Html.fromHTML () es conveniente, pero el superíndice no es más pequeño.
Daniel Schuler
¡Esto es mucho mejor! El método Html.fromHtml puede hacer que se corte el texto en superíndice.
Zach Sperske
Cuando utilizo este método, me gusta decir que 100 metros cuadrados equation.setText(blah+cs);no funciona. Sin embargo, funciona bien por separado. ¿Cómo conseguir que funcione?
Nadie
Mucho mejor que el método Html.fromHtml ()
científico
Por favor agregue una explicación
Aryeetey Solomon Aryeetey
48

Para todas las personas que preguntan, si quieren hacerlo más pequeño además de hacer un superíndice o un subíndice, solo necesitan agregar una etiqueta también. EX:

"X <sup><small> 2 </small></sup>"
Ariel Capozzoli
fuente
14

En el código, simplemente ponga esto "\ u00B2" así:

textView.setText("X\u00B2");

Gerardo Salazar Sánchez
fuente
Hola, tu respuesta fue muy útil. Sin embargo, ¿qué código se puede utilizar como subíndice? Además, ¿cómo se llaman estos códigos si los busco en Google, son Unicodes?
Kolaaa
Hola, sí es unicode, aquí un PDF con todos los unicode unicode.org/charts/PDF/U2070.pdf
Gerardo Salazar Sánchez
Gracias. Muy simple.
Izak
11

Si desea establecer el superíndice del archivo string.xml, intente esto:

recurso de cadena:

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

si desea que el superíndice sea más pequeño:

<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
fuente
11

Es un poco tarde, pero lo siguiente funciona bien, use superíndice como carácter especial, usé char espacial aquí.

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

(o) Desde el archivo de recursos de cadena:

<string name="test_string">
  <![CDATA[ X<sup><small>2</small></sup> ]]>
</string>
mvnkalyani
fuente
Soy nuevo en apilar overflow, en ese momento no sé cómo usarlo.
mvnkalyani
8

La respuesta Aceptada está obsoleta ahora. Así que revise este código. Conseguí esto de algún sitio web. Olvidé el nombre, pero de todos modos gracias por este buen código de trabajo.

     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:android:textAllCaps="false" Ponga siempre su spantext.

AMAN SINGH
fuente
4

El HTML.fromHTML (String) quedó en desuso a partir de API 24. Dicen que se use este en su lugar, que admite banderas como parámetro. Entonces, para salirse de la respuesta aceptada:

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

Y si desea un código que también considere las API anteriores a 24:

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 respuesta se derivó de: https://stackoverflow.com/a/37905107/4998704

Las banderas y otra documentación se pueden encontrar aquí: https://developer.android.com/reference/android/text/Html.html

Justin Liu
fuente
3

Encontré este artículo sobre cómo usar un Spannableo en un archivo de recursos de cadena: <sup>o <sub>para superíndice y subíndice, respectivamente.

Mohit Deshpande
fuente
6
El enlace en respuesta ya no parece relevante.
Pang
0

En los strings.xmlarchivos, puede usar la <sup>3</sup>etiqueta HTML . Funciona perfectamente para mi

EJEMPLO

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

Superíndice y subíndice de recursos de cadenas de Android para letras

Realmente no tiene que usar un documento html si alguna de las letras que desea está representada aquí

Para "a" copia y pega este "ᵃ"

Puede copiar y pegar cualquiera de estos superíndices y subíndices directamente en su recurso de cadena de Android.

Ejemplo:

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

Resultado: Marca registrada ᵀᴹ

Letras de superíndice y subíndice

Superíndice en mayúsculas ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴼ ᴾ ᴿ ᵀ ᵁ ⱽ ᵂ

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

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

JEREMÍAS SYLVESTER
fuente
-1
yourTextView.setText(Html.fromHtml("X<sup>2</sup>"));

This will be the result in you yourTextView =

X 2

ン ド リ ュ ー ラ イ ア ン ア
fuente