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


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

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


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

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>

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>

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.


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


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.


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>


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


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.