Subscript และ Superscript a String ใน Android


104

คุณจะพิมพ์สตริงด้วยตัวห้อยหรือตัวยกได้อย่างไร? คุณสามารถทำได้โดยไม่ต้องใช้ไลบรารีภายนอกหรือไม่? ฉันต้องการให้สิ่งนี้แสดงTextViewใน Android


ใช้เคล็ดลับ [this] [1] ใน listview และ textview [1]: stackoverflow.com/a/22105902/1350021
Omid Omidi

คำตอบ:


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

หรือ

งานทั่วไปและวิธีการทำใน Android


3
ในทางเทคนิคไม่รองรับ HTML นั่นคือการสร้าง Spanned ซึ่ง TextViews รองรับ CharSequences เป็นหลักพร้อมข้อมูลสไตล์
Dandre Allison

1
สิ่งนี้ไม่ได้ผลสำหรับฉัน ... แต่อาจเป็นสาเหตุที่ฉันตั้งค่าไว้ในไฟล์ strings.xml ของฉัน มันห้อยสำหรับฉัน แต่มันก็คลิปและไม่ว่าฉันจะใส่มันมากแค่ไหนก็ตาม
JPM

ไม่แยกวิเคราะห์ html นี้แพงอย่างบ้าคลั่ง?
A. Steenbergen

13
ลิงก์ในคำตอบดูเหมือนจะไม่เกี่ยวข้องอีกต่อไป
ปาง

3
ขอบคุณสำหรับสิ่งนี้ แต่คำตอบด้านล่างโดยใช้ SpannableStringBuilder นั้นดีกว่ามาก
Zach Sperske

105

ตัวอย่าง:

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
สิ่งนี้ดูถูกต้องขอบคุณสำหรับการแบ่งปัน! วิธี Html.fromHTML () สะดวก แต่ตัวยกไม่เล็กกว่า
Daniel Schuler

วิธีนี้ดีกว่า! วิธีการ Html.fromHtml สามารถทำให้ข้อความตัวยกถูกตัดออก
Zach Sperske

เมื่อฉันใช้วิธีนี้เช่นพูดว่า 100 ตารางเมตรequation.setText(blah+cs);มันไม่ได้ผล ทำงานได้ดีแยกกันแม้ว่า วิธีการรับงานนั้น?
ไม่มีใคร

ดีกว่าวิธีHtml.fromHtml ()
Scienticious

กรุณาเพิ่มคำอธิบาย
Aryeetey Solomon Aryeetey

48

สำหรับทุกคนที่ถามว่าหากคุณต้องการทำให้เล็กลงนอกเหนือจากการทำ super หรือ subscript คุณก็ต้องเพิ่มแท็กด้วย EX:

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

15

ในโค้ดให้ใส่ "\ u00B2" ดังนี้:

textView.setText("X\u00B2");


สวัสดีคำตอบของคุณมีประโยชน์มาก อย่างไรก็ตามรหัสใดที่สามารถใช้เป็นตัวห้อยได้? รหัสเหล่านี้เรียกว่าอะไรถ้าฉันจะใช้ Google พวกเขาเป็นรหัสเดียวหรือไม่?
Kolaaa

สวัสดีใช่คือ Unicode นี่คือไฟล์ PDF ที่มี unicode ทั้งหมดunicode.org/charts/PDF/U2070.pdf
Gerardo Salazar Sánchez

ขอบคุณ. ง่ายมาก.
Izak

11

หากคุณต้องการตั้งค่าตัวยกจากไฟล์ string.xml ให้ลองทำดังนี้:

ทรัพยากรสตริง:

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

หากคุณต้องการให้ตัวยกเล็กลง:

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

รหัส:

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

11

มันช้าไปหน่อย แต่หลังจากทำงานได้ดีใช้ตัวยกเป็นอักขระพิเศษฉันใช้อักขระเว้นวรรคที่นี่

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

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

(หรือ) จากไฟล์ทรัพยากรสตริง:

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

ฉันเป็นคนใหม่ที่จะใช้สแต็กโอเวอร์โฟลว์ตอนนั้นไม่รู้วิธีใช้
mvnkalyani

9

คำตอบที่ยอมรับได้เลิกใช้งานแล้ว ดังนั้นโปรดอ่านโค้ดส่วนนี้ ฉันได้รับสิ่งนี้จากบางเว็บไซต์ ฉันลืมชื่อ แต่ยังไงก็ขอบคุณสำหรับรหัสการทำงานที่ดีนี้

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

หมายเหตุ:ใส่android:textAllCaps="false"Spantext ของคุณเสมอ


4

HTML.fromHTML (String) เลิกใช้แล้วเมื่อ API 24 พวกเขาบอกว่าให้ใช้อันนี้แทนซึ่งรองรับแฟล็กเป็นพารามิเตอร์ เพื่อหลีกเลี่ยงคำตอบที่ยอมรับ:

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

และหากคุณต้องการรหัสที่พิจารณา API ก่อน 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>"));    
}

คำตอบนี้ได้มาจาก: https://stackoverflow.com/a/37905107/4998704

ดูแฟล็กและเอกสารอื่น ๆ ได้ที่นี่: https://developer.android.com/reference/android/text/Html.html


3

ฉันพบนี้บทความเกี่ยวกับวิธีการใช้Spannableหรือในแฟ้มทรัพยากรสตริง<sup>หรือ<sub>สำหรับยกและห้อยตามลำดับ


6
ลิงก์ในคำตอบดูเหมือนจะไม่เกี่ยวข้องอีกต่อไป
ปาง

1

Android String Resource Superscript และ Subscript สำหรับตัวอักษร

คุณไม่จำเป็นต้องใช้เอกสาร html หากมีการแสดงตัวอักษรใด ๆ ที่คุณต้องการที่นี่

สำหรับ "a" คัดลอกและวาง "ᵃ" นี้

คุณสามารถคัดลอกและวาง Superscripts และ Subscripts เหล่านี้ลงในทรัพยากรสตริงของ Android ได้โดยตรง

ตัวอย่าง:

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

ผลลัพธ์: เครื่องหมายการค้าᵀᴹ

ตัวยกและตัวห้อย

ทุนตัวยก ᴬᴮᴰᴱᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾᴿᵀᵁⱽ

ตัวย่อตัวยก ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖʳˢᵗᵘᵛʷˣʸᶻ

ตัวย่อตัว ย่อₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓ


0

ในstrings.xmlไฟล์คุณสามารถใช้ HTML<sup>3</sup>แท็กทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน

ตัวอย่าง

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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.