Как вы можете напечатать строку с нижним или верхним индексом? Можете ли вы сделать это без внешней библиотеки? Я хочу, чтобы это отображалось 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"
свой spantext.
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.
Для "a" скопируйте и вставьте это "ᵃ"
Вы можете скопировать и вставить любой из этих надстрочных и подстрочных индексов прямо в свой строковый ресурс Android.
Пример:
<string name="word_with_superscript" translatable="false">Trademark ᵀᴹ</string>
Результат: торговая марка ᵀᴹ
Надстрочные и подстрочные буквы
Надстрочные капитал ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶⱽ ᵂ
Надстрочные мизер ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ
Подстрочный минускул ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₜ ᵤ ᵥ ₓ
Они называются символами Unicode, и Android TextView
их поддерживает. Скопируйте нужный суперсценарий / субскрипт из этой вики: https://en.wikipedia.org/wiki/List_of_Unicode_characters#Superscripts_and_Subscripts
yourTextView.setText(Html.fromHtml("X<sup>2</sup>"));
This will be the result in you yourTextView =
Х 2