Нижний и верхний индекс строки в Android

104

Как вы можете напечатать строку с нижним или верхним индексом? Можете ли вы сделать это без внешней библиотеки? Я хочу, чтобы это отображалось TextViewв Android.

Мохит Дешпанде
источник
используйте трюк [this] [1] в представлении списка и его текстовом представлении. [1]: stackoverflow.com/a/22105902/1350021
Омид Омиди

Ответы:

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

или

Общие задачи и как их выполнять на Android

Константин Буров
источник
3
Технически он не поддерживает HTML, то есть создает Spanned, который поддерживает TextView. По сути, CharSequences с информацией о стиле.
Дандре Эллисон
1
У меня это не работает ... но, возможно, это потому, что я установил его в своем файле strings.xml. Он подписывает его для меня, но он зажимает его, и независимо от того, сколько заполнения я кладу, он всегда обрезан.
JPM
Разве не безумно дорого разбирать этот HTML?
A. Steenbergen
12
Ссылка в ответе больше не актуальна.
Панг,
3
Спасибо за это, но ответ ниже с использованием SpannableStringBuilder намного лучше.
Зак Сперске,
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 может привести к обрезанию текста надстрочного индекса.
Зак Сперске,
Когда я использую этот метод, я скажу, что 100 квадратных метров equation.setText(blah+cs);не работает. Хотя по отдельности работает нормально. Как получить эту работу?
Nobody
Гораздо лучше , чем Html.fromHtml () метод
scienticious
Пожалуйста, добавьте объяснение
Aryeetey Solomon Aryeetey
48

Ко всем, кто спрашивает, если вы хотите сделать его меньше, помимо создания супер или подстрочного индекса, вам просто нужно добавить тег. EX:

"X <sup><small> 2 </small></sup>"
Ариэль Капоццоли
источник
15

В коде просто введите "\ u00B2" Вот так:

textView.setText("X\u00B2");

Херардо Саласар Санчес
источник
Привет, твой ответ был очень полезным. Однако какой код можно использовать для подстрочного индекса? И как называются эти коды, если их гуглить, это юникоды?
Kolaaa
Привет, да, это юникод, вот PDF со всеми юникодами unicode.org/charts/PDF/U2070.pdf
Херардо Салазар Санчес
Спасибо. Очень просто.
Изак,
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 для букв

Вам действительно не нужно использовать html-документ, если здесь представлена ​​какая-либо из букв, которые вы хотите

Для "a" скопируйте и вставьте это "ᵃ"

Вы можете скопировать и вставить любой из этих надстрочных и подстрочных индексов прямо в свой строковый ресурс Android.

Пример:

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

Результат: торговая марка ᵀᴹ

Надстрочные и подстрочные буквы

Надстрочные капитал ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶⱽ ᵂ

Надстрочные мизер ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ

Подстрочный минускул ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₜ ᵤ ᵥ ₓ

ИЕРЕМИЯ СИЛЬВЕСТЕР
источник
0

В strings.xmlфайлах вы можете просто использовать <sup>3</sup>тег HTML . Отлично работает для меня

ПРИМЕР

<string name="turnoverRate">Turnover rate m<sup>3</sup>/m<sup>2</sup>/hour:</string>
Detilium
источник
-1
yourTextView.setText(Html.fromHtml("X<sup>2</sup>"));

This will be the result in you yourTextView =

Х 2

ン ド リ ュ ー ラ イ ア ン ア
источник