Підпишіть і перепишіть рядок в 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.