Indice et exposant une chaîne dans Android


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


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

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


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

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>

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>

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.


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


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.


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


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>


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.