java - Subíndice y superíndice de una cadena en Android
string superscript (13)
¿Cómo se puede imprimir una cadena con un subíndice o superíndice? ¿Puedes hacer esto sin una biblioteca externa? Quiero que esto se muestre en un TextView
en Android.
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);
El HTML.fromHTML (String) quedó obsoleto a partir de la API 24. Dicen usar este en su lugar, que admite indicadores como un parámetro. Entonces para irse 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 quiere 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://.com/a/37905107/4998704
Las banderas y otra documentación se pueden encontrar aquí: https://developer.android.com/reference/android/text/Html.html
En el código simplemente ponga esto "/ u00B2" De esta manera:
textView.setText("X/u00B2");
En los archivos strings.xml
, puede usar la etiqueta HTML <sup>3</sup>
. Me funciona a la perfección
EJEMPLO
<string name="turnoverRate">Turnover rate m<sup>3</sup>/m<sup>2</sup>/hour:</string>
Encontré this artículo sobre cómo usar un Spannable
o en un recurso de cadena: <sup>
o <sub>
para superíndice y subíndice, respectivamente.
La respuesta aceptada está en desuso ahora. Así que por favor revisa este fragmento de código. Lo obtuve de un 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: Siempre coloque android:textAllCaps="false"
de su spantext.
Mordió tarde, pero después de simplemente trabajar bien, usar superíndice como carácter especial, utilicé el carácter espacial aquí.
<string name="str">H₂</string>
Para todas las personas que preguntan, si desea hacerlo más pequeño además de hacer super o subíndice, solo necesita agregar una etiqueta también. EX:
"X <sup><small> 2 </small></sup>"
Se llaman caracteres Unicode y Android TextView
admite. Copie el súper / sub guión que desee de esta Wiki: https://en.wikipedia.org/wiki/List_of_Unicode_characters#Superscripts_and_Subscripts
Si desea establecer el superíndice desde el archivo string.xml intente esto:
recurso de cadena:
<string name="test_string">X<sup>3</sup></string>
si desea que el superíndice sea más pequeño:
<string name="test_string">X<sup><small>3</small></sup></string>
Código:
textView.setText(Html.fromHtml("Anything you want to put here"+getString(R.string.test_string)));
((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>
((TextView)findViewById(R.id.text)).setText(Html.fromHtml("X<sup>2</sup>"));
o
yourTextView.setText(Html.fromHtml("X<sup>2</sup>"));
This will be the result in you yourTextView =
X 2