Indice et exposant une chaîne dans Android

104

Comment imprimer une chaîne avec un indice ou un exposant? Pouvez-vous faire cela sans bibliothèque externe? Je veux que cela s'affiche dans un TextViewsous Android.

Mohit Deshpande
la source
utilisez [cette] [1] astuce dans la vue de liste et sa vue de texte. [1]: stackoverflow.com/a/22105902/1350021
Omid Omidi

Réponses:

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

ou

Tâches courantes et comment les faire sous Android

Konstantin Burov
la source
3
Il ne prend techniquement pas en charge HTML, c'est-à-dire crée un Spanned, que TextViews prend en charge. Essentiellement CharSequences avec des informations de style.
Dandre Allison
1
Cela ne fonctionne pas pour moi ... mais c'est peut-être parce que je l'ai placé dans mon fichier strings.xml. Il le souscrit pour moi mais il le clipse et peu importe combien de rembourrage je le mets, il est toujours coupé.
JPM
L'analyse de ce HTML n'est-elle pas incroyablement chère?
A. Steenbergen
11
Le lien en réponse ne semble plus pertinent.
Pang le
3
Merci pour cela, mais la réponse ci-dessous en utilisant un SpannableStringBuilder est bien meilleure.
Zach Sperske
105

Exemple:

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
la source
1
Cela semble vraiment correct, merci pour le partage! La méthode Html.fromHTML () est pratique, mais l'exposant n'est pas plus petit.
Daniel Schuler
C'est bien mieux! La méthode Html.fromHtml peut entraîner la coupure du texte en exposant.
Zach Sperske
Quand j'utilise cette méthode, j'aime dire que 100 mètres carrés equation.setText(blah+cs);ne fonctionnent pas. Fonctionne bien séparément cependant. Comment faire ça?
Personne
Bien mieux que la méthode Html.fromHtml ()
scienticious
S'il vous plaît ajouter une explication
Aryeetey Solomon Aryeetey
48

À toutes les personnes qui le demandent, si vous voulez le réduire en plus de créer un super ou un indice, il vous suffit d'ajouter une balise. EX:

"X <sup><small> 2 </small></sup>"
Ariel Capozzoli
la source
15

Dans le code, mettez simplement ceci "\ u00B2" comme ceci:

textView.setText("X\u00B2");

Gerardo Salazar Sánchez
la source
Salut, votre réponse a été très utile. Cependant, quel code peut être utilisé pour l'indice? Aussi comment s'appellent ces codes si je veux les rechercher sur Google, sont-ils des Unicodes?
Kolaaa
Salut, oui c'est unicode, voici un PDF avec tous les unicodes unicode.org/charts/PDF/U2070.pdf
Gerardo Salazar Sánchez
Merci. Très simple.
Izak le
11

Si vous souhaitez définir l'exposant à partir du fichier string.xml, essayez ceci:

ressource de chaîne:

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

si vous voulez que l'exposant soit plus petit:

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

Code:

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

C'est un peu tard mais la suite fonctionne très bien, utilisez l'exposant comme caractère spécial, j'ai utilisé le caractère spatial ici.

<string name="str">H₂</string>
Code
la source
11
((TextView)findViewById(R.id.text)).setText(Html.fromHtml("X<sup><small>2</small></sup>")); 

(ou) À partir du fichier de ressources de chaîne:

<string name="test_string">
  <![CDATA[ X<sup><small>2</small></sup> ]]>
</string>
mvnkalyani
la source
Je suis nouveau pour empiler le flux, à ce moment-là, je ne sais pas comment l'utiliser.
mvnkalyani le
8

La réponse Acceptée est désormais obsolète. Alors s'il vous plaît, parcourez ce morceau de code. J'ai obtenu cela sur un site Web. J'ai oublié le nom mais de toute façon merci pour ce bon morceau de code fonctionnel.

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

Remarque: mettez toujours android:textAllCaps="false"votre spantext.

AMAN SINGH
la source
4

Le HTML.fromHTML (String) était obsolète à partir de l'API 24. Ils disent d'utiliser celui-ci à la place, qui prend en charge les indicateurs comme paramètre. Donc, pour sortir de la réponse acceptée:

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

Et si vous voulez un code qui prend également en compte les API antérieures à 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>"));    
}

Cette réponse est dérivée de: https://stackoverflow.com/a/37905107/4998704

Les indicateurs et autres documentations peuvent être trouvés ici: https://developer.android.com/reference/android/text/Html.html

Justin Liu
la source
3

J'ai trouvé cet article sur la façon d'utiliser un Spannableou dans un fichier de ressources de chaîne: <sup>ou <sub>pour exposant et indice, respectivement.

Mohit Deshpande
la source
6
Le lien en réponse ne semble plus pertinent.
Pang le
1

Exposant et indice de ressource de chaîne Android pour les lettres

Vous n'avez pas vraiment besoin d'utiliser un document html si l'une des lettres que vous souhaitez est représentée ici

Pour "a" copiez et collez ce "ᵃ"

Vous pouvez copier et coller l'un de ces exposants et indices directement dans votre ressource de chaîne Android.

Exemple:

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

Résultat: marque déposée ᵀᴹ

Lettres en exposant et en indice

Majuscule en exposant ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴼ ᴾ ᴿ ᵀ ᵁ ⱽ ᵂ

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

Indice minuscule ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₜ ᵤ ᵥ ₓ

JEREMIAH SYLVESTER
la source
0

Dans les strings.xmlfichiers, vous pouvez simplement utiliser la <sup>3</sup>balise HTML . Travaille parfaitement pour moi

EXEMPLE

<string name="turnoverRate">Turnover rate m<sup>3</sup>/m<sup>2</sup>/hour:</string>
Détilium
la source
-1
yourTextView.setText(Html.fromHtml("X<sup>2</sup>"));

This will be the result in you yourTextView =

X 2

ン ド リ ュ ー ラ イ ア ン ア
la source