Indeks dolny i indeks górny a String w systemie Android


Odpowiedzi:


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

lub

Typowe zadania i sposoby ich wykonywania w systemie Android


3
Technicznie nie obsługuje HTML, to znaczy tworzy Spanned, który obsługuje TextViews. Zasadniczo CharSequences z informacjami o stylu.
Dandre Allison

1
To nie działa dla mnie ... ale może to dlatego, że umieściłem go w moim pliku strings.xml. Indeksuje go dla mnie, ale przycina go i bez względu na to, ile wyściółki włożyłem, zawsze jest przycięty.
JPM

Czy parsowanie tego kodu HTML nie jest szalenie drogie?
A. Steenbergen

11
Link w odpowiedzi nie wydaje się już trafny.
Pang

3
Dzięki za to, ale odpowiedź poniżej przy użyciu SpannableStringBuilder jest znacznie lepsza.
Zach Sperske,

105

Przykład:

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
To faktycznie wygląda dobrze, dzięki za udostępnienie! Metoda Html.fromHTML () jest wygodna, ale indeks górny nie jest mniejszy.
Daniel Schuler,

To jest o wiele lepsze! Metoda Html.fromHtml może prowadzić do obcięcia tekstu w indeksie górnym.
Zach Sperske,

Kiedy używam tej metody, mówię, że 100 metrów kwadratowych, equation.setText(blah+cs);to nie działa. Jednak działa dobrze osobno. Jak uzyskać taką pracę?
Nikt

Znacznie lepiej niż Html.fromHtml () metoda
scienticious

Proszę dodać wyjaśnienie
Aryeetey Solomon Aryeetey

48

Do wszystkich osób pytających, czy chcesz go zmniejszyć oprócz tworzenia super lub indeksu dolnego, musisz również dodać tag. DAWNY:

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


11

Jeśli chcesz ustawić indeks górny z pliku string.xml, spróbuj tego:

zasób ciągu:

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

jeśli chcesz, aby indeks górny był mniejszy:

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

Kod:

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

11

Trochę późno, ale po prostu działa dobrze, użyj indeksu górnego jako znaku specjalnego, użyłem tutaj znaku przestrzennego.

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

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

(lub) Z pliku zasobów ciągu:

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

Jestem nowy w stosie nad przepływem, w tym czasie nie wiem, jak używać.
mvnkalyani

8

Zaakceptowana odpowiedź jest teraz przestarzała. Więc proszę, przejrzyj ten fragment kodu. Mam to z jakiejś strony internetowej. Zapomniałem nazwy, ale mimo wszystko dzięki za ten dobry fragment działającego kodu.

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

Uwaga: zawsze umieszczaj android:textAllCaps="false"swój spantext.


4

HTML.fromHTML (String) został uznany za przestarzały w API 24. Mówią, że zamiast tego używać tego, który obsługuje flagi jako parametr. Aby wyjść z zaakceptowanej odpowiedzi:

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

A jeśli potrzebujesz kodu uwzględniającego również interfejsy API starsze niż 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>"));    
}

Ta odpowiedź pochodzi z: https://stackoverflow.com/a/37905107/4998704

Flagi i inną dokumentację można znaleźć tutaj: https://developer.android.com/reference/android/text/Html.html


3

Znalazłem ten artykuł o tym, jak używać Spannablelub w pliku zasobów ciągu: <sup>lub odpowiednio <sub>dla indeksu górnego i dolnego.


6
Link w odpowiedzi nie wydaje się już trafny.
Pang

1

Indeks górny i dolny zasobów ciągu systemu Android dla liter

Naprawdę nie musisz używać dokumentu HTML, jeśli któraś z żądanych liter jest tutaj reprezentowana

W przypadku „a” skopiuj i wklej ten „ᵃ”

Możesz skopiować i wkleić dowolny z tych indeksów górnych i dolnych bezpośrednio do zasobu ciągu Android.

Przykład:

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

Wynik: znak towarowy ᵀᴹ

Litery w indeksie górnym i dolnym

Górny kapitał ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶⱽ ᵂ

Górny nikła ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ

Indeks nikła ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ


0

W strings.xmlplikach możesz po prostu użyć <sup>3</sup>tagu HTML . U mnie działa idealnie

PRZYKŁAD

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.