Як можна надрукувати рядок за допомогою підрядника або надриска? Чи можна це зробити без зовнішньої бібліотеки? Я хочу, щоб це відображалося TextView
в Android.
Як можна надрукувати рядок за допомогою підрядника або надриска? Чи можна це зробити без зовнішньої бібліотеки? Я хочу, щоб це відображалося TextView
в Android.
Відповіді:
((TextView)findViewById(R.id.text)).setText(Html.fromHtml("X<sup>2</sup>"));
або
Приклад:
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);
equation.setText(blah+cs);
він не працює. Хоча добре працює окремо. Як отримати цю роботу?
Для всіх людей, які запитують, якщо ви хочете зробити його меншим, крім створення супер або підписки, вам також потрібно додати тег. EX:
"X <sup><small> 2 </small></sup>"
У коді просто поставте це "\ u00B2" Ось так:
textView.setText("X\u00B2");
Якщо ви хочете встановити супер-скрипт з файлу string.xml, спробуйте це:
рядовий ресурс:
<string name="test_string">X<sup>3</sup></string>
якщо ви хочете, щоб супскрипт був меншим:
<string name="test_string">X<sup><small>3</small></sup></string>
Код:
textView.setText(Html.fromHtml("Anything you want to put here"+getString(R.string.test_string)));
((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>
Зараз прийнята відповідь застаріла. Тому, будь ласка, перегляньте цей фрагмент коду. Я отримав це з якогось веб-сайту. Я забув ім'я, але все одно дякую за цей гарний фрагмент робочого коду.
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"
свій спантекс.
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
Їх називають символами Unicode, а Android TextView
підтримує їх. Скопіюйте потрібний супер / підкрипт із цієї Вікі: https://en.wikipedia.org/wiki/List_of_Unicode_characters#Superscripts_and_Subscripts
Для "a" скопіюйте та вставте це "ᵃ"
Ви можете скопіювати та вставити будь-який із цих надписів та підписок безпосередньо у свій ресурс для рядків Android.
Приклад:
<string name="word_with_superscript" translatable="false">Trademark ᵀᴹ</string>
Результат: товарний знак ᵀᴹ
Суперскриптні та підписні листи
Суперскрипт капіталу ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴼ ᴾ ᴿ ᵀ ᵁ ⱽ
Вершина мінусової ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ ⁱ ʲ ᵏ ˡ ⁿ ᵒ ᵖ ʳ ˢ ᵗ ᵘᵘᵛ
Підрядний мінус ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₜ ᵤ ₓ
yourTextView.setText(Html.fromHtml("X<sup>2</sup>"));
This will be the result in you yourTextView =
X 2