Chỉ số dưới và chỉ số trên một chuỗi trong Android


104

Làm cách nào bạn có thể in một chuỗi có chỉ số dưới hoặc chỉ số trên? Bạn có thể làm điều này mà không cần thư viện bên ngoài không? Tôi muốn điều này hiển thị trong một TextViewtrong Android.


sử dụng thủ thuật [this] [1] trong listview và textview của nó. [1]: stackoverflow.com/a/22105902/1350021
Omid Omidi

Câu trả lời:


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

hoặc là

Các công việc phổ biến và cách thực hiện trong Android


3
Về mặt kỹ thuật, nó không hỗ trợ HTML, đó là tạo Spanned, mà TextViews hỗ trợ. Về cơ bản CharSequences với thông tin phong cách.
Dandre Allison

1
Điều này không hiệu quả với tôi ... nhưng có thể nguyên nhân là do tôi đã đặt nó bên trong tệp string.xml của mình. Nó đăng ký nó cho tôi nhưng nó kẹp nó và không có vấn đề bao nhiêu đệm tôi đặt nó luôn luôn bị cắt.
JPM

Việc phân tích cú pháp html này không phải là quá đắt sao?
A. Steenbergen

10
Liên kết trong câu trả lời dường như không còn liên quan nữa.
Pang

3
Cảm ơn vì điều này nhưng câu trả lời dưới đây bằng cách sử dụng SpannableStringBuilder sẽ tốt hơn nhiều.
Zach Sperske

105

Thí dụ:

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
Điều này thực sự có vẻ đúng, cảm ơn vì đã chia sẻ! Phương thức Html.fromHTML () rất tiện lợi, nhưng chỉ số trên không nhỏ hơn.
Daniel Schuler

Đây là cách tốt hơn! Phương thức Html.fromHtml có thể khiến văn bản chỉ số trên bị cắt bỏ.
Zach Sperske

Khi tôi sử dụng phương pháp này như để nói 100 mét vuông bởi equation.setText(blah+cs);nó không hoạt động. Hoạt động tốt mặc dù vậy. Làm thế nào để có được công việc đó?
Không ai vào

Tốt hơn rất nhiều so với phương thức Html.fromHtml ()
học giáo dục

Vui lòng thêm lời giải thích
Aryeetey Solomon Aryeetey

48

Đối với tất cả những người hỏi, nếu bạn muốn làm cho nó nhỏ hơn ngoài việc tạo super hoặc subscript, bạn chỉ cần thêm tag. VÍ DỤ:

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

14

Trong mã chỉ cần nhập "\ u00B2" Như thế này:

textView.setText("X\u00B2");


Xin chào, câu trả lời của bạn rất hữu ích. Tuy nhiên, mã nào có thể được sử dụng cho chỉ số dưới? Ngoài ra, những mã này được gọi là gì nếu tôi google chúng, chúng có phải là mã đơn không?
Kolaaa

Hi, vâng là unicode, ở đây một PDF whit tất cả unicodes unicode.org/charts/PDF/U2070.pdf
Gerardo Salazar Sánchez

Cảm ơn. Rất đơn giản.
Izak

11

Nếu bạn muốn đặt chỉ số trên từ tệp string.xml, hãy thử cách này:

tài nguyên chuỗi:

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

nếu bạn muốn chỉ số trên nhỏ hơn:

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

Mã:

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

11

Nó hơi muộn nhưng sau đây chỉ hoạt động tốt, sử dụng superscript làm ký tự đặc biệt, tôi đã sử dụng khoảng cách char ở đây.

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

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

(hoặc) Từ Tệp Tài nguyên Chuỗi:

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

Tôi là người mới để chồng lên luồng, tại thời điểm đó không biết làm thế nào để sử dụng.
mvnkalyani,

8

Câu trả lời được chấp nhận hiện không được dùng nữa. Vì vậy, xin vui lòng xem qua đoạn mã này. Tôi lấy cái này từ một số trang web. Tôi quên tên nhưng dù sao cũng cảm ơn vì đoạn mã làm việc tốt này.

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

Lưu ý: Luôn đặt android:textAllCaps="false"spantext của bạn.


4

HTML.fromHTML (String) không được dùng nữa kể từ API 24. Họ nói rằng hãy sử dụng cái này để thay thế, hỗ trợ cờ làm tham số. Vì vậy, để đi ra khỏi câu trả lời được chấp nhận:

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

Và nếu bạn muốn mã xem xét cả API trước 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>"));    
}

Câu trả lời này được lấy từ: https://stackoverflow.com/a/37905107/4998704

Các cờ và tài liệu khác có thể được tìm thấy tại đây: https://developer.android.com/reference/android/text/Html.html


3

Tôi tìm thấy này bài viết về cách sử dụng một Spannablehoặc trong một tập tin tài nguyên chuỗi: <sup>hoặc <sub>cho superscript và subscript, tương ứng.


6
Liên kết trong câu trả lời dường như không còn liên quan nữa.
Pang

0

Trong các strings.xmltệp, bạn chỉ có thể sử dụng <sup>3</sup>thẻ HTML . Làm việc hoàn hảo cho tôi

THÍ DỤ

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


0

Chỉ số phụ và chỉ số tài nguyên chuỗi Android cho các chữ cái

Bạn không thực sự phải sử dụng tài liệu html nếu bất kỳ ký tự nào bạn muốn được trình bày ở đây

Đối với "a", hãy sao chép và dán "ᵃ" này

Bạn có thể sao chép và dán trực tiếp bất kỳ Bảng ghi tên và Đăng ký nào trong số này vào Tài nguyên chuỗi Android của mình.

Thí dụ:

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

Kết quả: Nhãn hiệu ᵀᴹ

Chữ cái Superscript và Subscript

Chữ viết hoa ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴼ ᴾ ᴿ ᵀ ᵁ ⱽ ᵂ

Chỉ số siêu nhỏ ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ ⁱ ʲ ᵏ ˡ ᵐ ⁿ ᵒ ᵖ ʳ ˢ ᵗ ᵘ ᵛ ʷ ˣ ʸ

Chỉ số dưới cực nhỏ ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₜ ᵤ ᵥ ₓ


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.