Нижний и верхний индекс строки в 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>


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.