Підпишіть і перепишіть рядок в Android


104

Як можна надрукувати рядок за допомогою підрядника або надриска? Чи можна це зробити без зовнішньої бібліотеки? Я хочу, щоб це відображалося TextViewв Android.


використовувати [цей] [1] трюк у перегляді списку та його перегляді тексту. [1]: stackoverflow.com/a/22105902/1350021
— Омід Omidi

Відповіді:


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

або

Загальні завдання та як їх робити в Android


3
Він технічно не підтримує HTML, тобто створює Spanned, який підтримує TextViews. По суті CharSequences з інформацією про стиль.
— Дандре Еллісон

1
Це не працює для мене ... але, можливо, причиною цього я встановив його у файлі strings.xml. Він підписує його на мене, але він затискає його, і незалежно від того, скільки накладки я кладу, його завжди вирізається.
— JPM

Чи не розбирає цей html шалено дорого?
— А. Стінберген

10
Посилання у відповідь вже не здається актуальним.
— Панг

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 () зручний, але індекс не менший.
— Даніель Шулер

Це так краще! Метод Html.fromHtml може призвести до того, що текст надпису буде відрізаний.
— Zach Sperske

Коли я використовую цей метод, як, наприклад, 100 метрів квадрат, equation.setText(blah+cs);він не працює. Хоча добре працює окремо. Як отримати цю роботу?
— Ніхто

Набагато краще , ніж Html.fromHtml () метод
— scienticious

Будь ласка, додайте пояснення
— Aryeetey Solomon Aryeetey

48

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

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

14

У коді просто поставте це "\ u00B2" Ось так:

textView.setText("X\u00B2");


Привіт, ваша відповідь була дуже корисною. Однак який код можна використовувати для підписки? Крім того, як називаються ці коди, якщо я що їх google, це unicodes?
— Колааа

Привіт, так це юнікод, тут 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>

10
((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

8

Зараз прийнята відповідь застаріла. Тому, будь ласка, перегляньте цей фрагмент коду. Я отримав це з якогось веб-сайту. Я забув ім'я, але все одно дякую за цей гарний фрагмент робочого коду.

     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"свій спантекс.


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
Посилання у відповідь вже не здається актуальним.
— Панг

0

У strings.xmlфайлах ви можете просто використовувати <sup>3</sup>тег HTML . Мені ідеально працювати

ПРИКЛАД

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


0

Суперскрипт і підписка для листів для рядків Android

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

Для "a" скопіюйте та вставте це "ᵃ"

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

Приклад:

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

Результат: товарний знак ᵀᴹ

Суперскриптні та підписні листи

Суперскрипт капіталу ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴼ ᴾ ᴿ ᵀ ᵁ ⱽ

Вершина мінусової ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ ⁱ ʲ ᵏ ˡ ⁿ ᵒ ᵖ ʳ ˢ ᵗ ᵘᵘᵛ

Підрядний мінус ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₜ ᵤ ₓ


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.