Subskrip dan Superskrip String di Android

104

Bagaimana Anda bisa mencetak string dengan subskrip atau superskrip? Bisakah Anda melakukan ini tanpa perpustakaan eksternal? Saya ingin ini ditampilkan TextViewdi Android.

Mohit Deshpande
sumber
gunakan trik [ini] [1] dalam tampilan daftar dan tampilan teksnya. [1]: stackoverflow.com/a/22105902/1350021
Omid Omidi

Jawaban:

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

atau

Tugas Umum dan Cara Melakukannya di Android

Konstantin Burov
sumber
3
Secara teknis tidak mendukung HTML, yang membuat Spanned, yang didukung oleh TextView. Pada dasarnya CharSequences dengan informasi gaya.
Dandre Allison
1
Ini tidak berhasil untuk saya ... tapi mungkin itu penyebabnya saya mengaturnya di dalam file strings.xml saya. Itu berlangganan untuk saya tetapi itu klip itu dan tidak peduli berapa banyak bantalan yang saya letakkan selalu terpotong.
JPM
Bukankah mengurai html ini sangat mahal?
A. Steenbergen
11
Tautan dalam jawaban sepertinya tidak relevan lagi.
Pang
3
Terima kasih untuk ini, tetapi jawaban di bawah ini menggunakan SpannableStringBuilder jauh lebih baik.
Zach Sperske
105

Contoh:

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
sumber
1
Ini benar-benar terlihat benar, terima kasih telah berbagi! Metode Html.fromHTML () mudah digunakan, tetapi superskripnya tidak lebih kecil.
Daniel Schuler
Ini jauh lebih baik! Metode Html.fromHtml dapat menyebabkan teks superskrip terpotong.
Zach Sperske
Ketika saya menggunakan metode ini seperti mengatakan 100 meter persegi equation.setText(blah+cs);tidak berhasil. Bekerja dengan baik secara terpisah. Bagaimana cara mendapatkan pekerjaan itu?
Tidak ada orang
Jauh lebih baik daripada metode Html.fromHtml ()
scienticious
Silakan tambahkan penjelasan
Aryeetey Solomon Aryeetey
48

Kepada semua orang yang bertanya, jika ingin dikecilkan selain dibuat super atau subskrip, tinggal tambahkan tag juga. EX:

"X <sup><small> 2 </small></sup>"
Ariel Capozzoli
sumber
15

Di dalam kode masukkan saja ini "\ u00B2" Seperti ini:

textView.setText("X\u00B2");

Gerardo Salazar Sánchez
sumber
Hai, jawaban Anda sangat membantu. Namun, kode apa yang dapat digunakan untuk subskrip? Juga apa sebutan kode-kode ini jika saya ingin mencari di Google, apakah kode itu unicode?
Kolaaa
Hai, ya adalah unicode, ini PDF dengan semua unicode
Gerardo Salazar Sánchez
Terima kasih. Sangat sederhana.
Izak
11

Jika Anda ingin mengatur superskrip dari file string.xml coba ini:

sumber daya string:

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

jika Anda ingin superskrip berukuran lebih kecil:

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

Kode:

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

Agak terlambat tetapi mengikuti hanya berfungsi dengan baik, gunakan superskrip sebagai karakter khusus, saya menggunakan karakter spasial di sini.

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

(atau) Dari File Sumber Daya String:

<string name="test_string">
  <![CDATA[ X<sup><small>2</small></sup> ]]>
</string>
mvnkalyani.dll
sumber
Saya baru mengenal stack over, pada saat itu tidak tahu bagaimana cara menggunakannya.
mvnkalyani
8

Jawaban yang Diterima sudah tidak digunakan lagi sekarang. Jadi silakan baca kode ini. Saya mendapatkan ini dari beberapa situs web. Saya lupa namanya tapi terima kasih untuk bagian kode kerja yang bagus ini.

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

Catatan: Selalu letakkan android:textAllCaps="false"teks spasi Anda.

AMAN SINGH
sumber
4

HTML.fromHTML (String) sudah tidak digunakan lagi pada API 24. Mereka mengatakan untuk menggunakan yang ini, yang mendukung flag sebagai parameter. Jadi untuk keluar dari jawaban yang diterima:

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

Dan jika Anda menginginkan kode yang mempertimbangkan API pra-24 juga:

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

Jawaban ini berasal dari: https://stackoverflow.com/a/37905107/4998704

Bendera dan dokumentasi lainnya dapat ditemukan di sini: https://developer.android.com/reference/android/text/Html.html

Justin Liu
sumber
3

Saya menemukan artikel ini tentang cara menggunakan Spannableatau dalam file sumber daya string: <sup>atau <sub>masing-masing untuk superskrip dan subskrip.

Mohit Deshpande
sumber
6
Tautan dalam jawaban sepertinya tidak relevan lagi.
Pang
1

Android String Resource Superskrip dan Subskrip untuk huruf

Anda tidak benar-benar harus menggunakan dokumen html jika salah satu huruf yang Anda inginkan terwakili di sini

Untuk "a" salin dan tempel ini "ᵃ"

Anda dapat menyalin dan menempelkan Superskrip dan Langganan ini langsung ke Sumber Daya String Android Anda.

Contoh:

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

Hasil: Merek Dagang ᵀᴹ

Huruf superskrip dan subskrip

Modal Superscript ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶⱽ ᵂ

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

Subscript sangat kecil ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ

JEREMIAH SYLVESTER
sumber
0

Di strings.xmlfile, Anda cukup menggunakan <sup>3</sup>tag HTML . Bekerja dengan sempurna untuk saya

CONTOH

<string name="turnoverRate">Turnover rate m<sup>3</sup>/m<sup>2</sup>/hour:</string>
Detilium
sumber
-1
yourTextView.setText(Html.fromHtml("X<sup>2</sup>"));

This will be the result in you yourTextView =

X 2

ン ド リ ュ ー ラ イ ア ン ア
sumber