Pedice e apice una stringa in Android


Risposte:


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

o

Attività comuni e come eseguirle in Android


3
Tecnicamente non supporta HTML, ovvero crea uno Spanned, che TextViews supporta. Essenzialmente CharSequences con informazioni sullo stile.
Dandre Allison

1
Questo non funziona per me ... ma forse è perché l'ho impostato nel mio file strings.xml. Lo sottoscrive per me ma lo ritaglia e non importa quanto imbottitura metta è sempre ritagliato.
JPM

L'analisi di questo HTML non è follemente costoso?
A. Steenbergen

11
Il link nella risposta non sembra più rilevante.
Pang

3
Grazie per questo, ma la risposta di seguito utilizzando uno SpannableStringBuilder è molto meglio.
Zach Sperske

105

Esempio:

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
Sembra davvero giusto, grazie per la condivisione! Il metodo Html.fromHTML () è comodo, ma l'apice non è più piccolo.
Daniel Schuler

È molto meglio! Il metodo Html.fromHtml può comportare la troncatura del testo in apice.
Zach Sperske

Quando uso questo metodo come dire che 100 metri quadrati equation.setText(blah+cs);non funziona. Funziona bene separatamente però. Come ottenere quel lavoro?
Nessuno

Molto meglio del metodo Html.fromHtml ()
Scienticious

Si prega di aggiungere una spiegazione
Aryeetey Solomon Aryeetey

48

A tutte le persone che chiedono, se vuoi renderlo più piccolo oltre a fare super o pedice, devi solo aggiungere anche il tag. EX:

"X <sup><small> 2 </small></sup>"


11

Se vuoi impostare l'apice dal file string.xml prova questo:

risorsa stringa:

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

se vuoi che l'apice sia più piccolo:

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

Codice:

textView.setText(Html.fromHtml("Anything you want to put here"+getString(R.string.test_string)));

11

È un po 'tardi ma seguire funziona bene, usa l'apice come carattere speciale, ho usato il carattere spaziale qui.

<string name="str">H₂</string>

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

(o) Dal file di risorse della stringa:

<string name="test_string">
  <![CDATA[ X<sup><small>2</small></sup> ]]>
</string>

sono nuovo per impilare il flusso, in quel momento non so come usare.
mvnkalyani

8

La risposta accettata è ora deprecata. Quindi per favore leggi questo pezzo di codice. L'ho preso da qualche sito web. Ho dimenticato il nome ma comunque grazie per questo bel pezzo di codice funzionante.

     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: mettete sempre android:textAllCaps="false"del vostro spantext.


4

HTML.fromHTML (String) è stato deprecato a partire dall'API 24. Dicono di usare questo invece, che supporta i flag come parametro. Quindi, per uscire dalla risposta accettata:

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

E se vuoi un codice che consideri anche le API pre-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>"));    
}

Questa risposta è stata derivata da: https://stackoverflow.com/a/37905107/4998704

I flag e altra documentazione possono essere trovati qui: https://developer.android.com/reference/android/text/Html.html


3

Ho trovato questo articolo su come utilizzare un Spannableo in un file di risorse di stringa: <sup>o rispettivamente <sub>per apice e pedice.


6
Il link nella risposta non sembra più rilevante.
Pang

1

Android String Resource Apice e pedice per le lettere

Non devi davvero usare il documento html se una qualsiasi delle lettere che desideri è rappresentata qui

Per "a" copia e incolla questo "ᵃ"

Puoi copiare e incollare uno qualsiasi di questi apici e pedici direttamente nella tua risorsa stringa Android.

Esempio:

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

Risultato: marchio ᵀᴹ

Lettere in apice e pedice

Capitale in apice ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴼ ᴾ ᴿ ᵀ ᵁ ⱽ ᵂ

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

Pedice minuscolo ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ


0

Nei strings.xmlfile, puoi semplicemente usare l'HTML<sup>3</sup> tag . Funziona perfettamente per me

ESEMPIO

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


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.