Android'de Alt Simge ve Üst Simge Dizesi


Yanıtlar:


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

veya

Android'de Ortak Görevler ve Bunların Nasıl Yapılması


3
Teknik olarak HTML'yi desteklemiyor, yani TextViews tarafından desteklenen bir Dağıtılmış oluşturuyor. Temelde stil bilgisine sahip CharSequences.
Dandre Allison

1
Bu benim için çalışmıyor ... ama belki de onu strings.xml dosyamın içine yerleştirmiş olmamdan kaynaklanıyor olabilir. Benim için abone oluyor ama klipsliyor ve ne kadar dolgu koyarsam yapayım her zaman kırpılıyor.
JPM

Bu html'yi ayrıştırmak delice pahalı değil mi?
A. Steenbergen

11
Yanıttaki bağlantı artık alakalı görünmüyor.
Pang

3
Bunun için teşekkürler, ancak bir SpannableStringBuilder kullanarak aşağıdaki cevap çok daha iyi.
Zach Sperske

105

Misal:

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
Bu aslında doğru görünüyor, paylaştığınız için teşekkürler! Html.fromHTML () yöntemi kullanışlıdır, ancak üst simge daha küçük değildir.
Daniel Schuler

Bu çok daha iyi! Html.fromHtml yöntemi, üst simge metninin kesilmesine neden olabilir.
Zach Sperske

Bu yöntemi kullandığımda 100 metre kare demek gibi equation.setText(blah+cs);işe yaramıyor. Yine de ayrı ayrı iyi çalışıyor. O işi nasıl yaptırabilirim?
Kimse

Html.fromHtml () yönteminden çok daha iyi
bilimsel

Lütfen açıklama ekleyin
Aryeetey Solomon Aryeetey

48

Soran herkese, süper veya alt simge yapmanın yanı sıra küçültmek istiyorsanız, sadece etiket eklemeniz gerekir. EX:

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


11

Üst yazıyı string.xml dosyasından ayarlamak istiyorsanız şunu deneyin:

dize kaynağı:

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

üst simgenin daha küçük olmasını istiyorsanız:

<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

Biraz geç ama sadece iyi çalıştıktan sonra, özel karakter olarak üst yazıyı kullanın, burada uzaysal karakter kullandım.

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

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

(veya) Dize Kaynak Dosyasından:

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

Akış üzerine istifleme konusunda yeniyim, o sırada nasıl kullanılacağını bilmiyorum.
mvnkalyani

8

Kabul edilen yanıt artık kullanımdan kaldırılmıştır. Bu yüzden lütfen bu kod parçasını gözden geçirin. Bunu bir web sitesinden aldım. İsmi unuttum ama yine de bu güzel çalışma kodu için teşekkürler.

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

Not: Her zaman android:textAllCaps="false"spanteksinizi koyun.


4

HTML.fromHTML (String) API 24 itibariyle kullanımdan kaldırıldı. Bunun yerine bayrakları parametre olarak destekleyen bunu kullanmayı söylüyorlar. Kabul edilen cevabın dışına çıkmak için:

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

Ve 24'ten önceki API'leri de dikkate alan bir kod istiyorsanız:

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

Bu yanıt şu adresten türetilmiştir: https://stackoverflow.com/a/37905107/4998704

Bayraklar ve diğer belgeler burada bulunabilir: https://developer.android.com/reference/android/text/Html.html


3

Bir veya bir dize kaynak dosyasında nasıl kullanılacağına ilişkin bu makaleyi buldum Spannable: <sup>veya <sub>sırasıyla üst simge ve alt simge için.


6
Yanıttaki bağlantı artık alakalı görünmüyor.
Pang

1

Android String Resource Superscript ve Harfler için Alt Simge

İstediğiniz harflerden herhangi biri burada gösteriliyorsa, gerçekten html belgesini kullanmak zorunda değilsiniz.

"Bir" için bunu "ᵃ" kopyalayıp yapıştırın

Bu Üst Simgeler ve Aboneliklerden herhangi birini kopyalayıp doğrudan Android Dize Kaynağınıza yapıştırabilirsiniz.

Misal:

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

Sonuç: Ticari Marka ᵀᴹ

Üst simge ve Alt simge harfler

Üst simge büyük harf ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴼ ᴾ ᴿ ᵀ ᵁ ⱽ ᵂ

Üst simge küçük ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ ⁱ ʲ ᵏ ˡ ᵐ ⁿ ᵒ ᵖ ʳ ˢ ᵗ ᵘ ᵛ ʷ ˣ ʸ ᶻ

Alt simge küçük ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₜ ᵤ ᵥ ₓ


0

Gelen strings.xmldosyalar, sadece HTML kullanabilirsiniz <sup>3</sup>etiketi. Benim için mükemmel çalış

MİSAL

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


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.