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