Как подписать текст на спиннер в Android?

Я использую счетчик с некоторым текстом (String), и я хотел бы написать химическое выражение MgCl2 с номером 2 подписанным. Как мне это сделать?

Я видел некоторые посты, рассказывающие об использовании Html.fromHtml(), но AndroidStudio говорит, что этот метод устарел. Вы можете увидеть мой код ниже.

Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);

List<String> list = new ArrayList<String>();
list.add("MgCl2");

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, list);

dataAdapter.setDropDownViewResource(android.R.layout.simple_expandable_list_item_1);
spinner1.setAdapter(dataAdapter);

2 ответа

Вы можете сделать это напрямую с SpannableString,

SpannableString s = new SpannableString("MgCl2");
s.setSpan(new SubscriptSpan(), 5, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

Ваш ArrayAdapter можно напечатать как <CharSequence>, Любой вниз по течению setText вызовы могут принимать аргумент CharSequence (вместо String вы используете сейчас).

Обратите внимание, что SpannableString неизменен. Для более сложных конструкций, вы можете захотеть SpannableStringBuilder,

Вероятно, вы должны знать о наборе CharacterStyle подклассы. Они представляют все эффекты, которые вы можете применить к Spanned любого конкретного типа.

Ты можешь использовать SpannableStringBuilder создать текст с нижним индексом. Что-то вроде:

SpannableStringBuilder span = new SpannableStringBuilder("MgCl2");
span.setSpan(new SubscriptSpan(), 4, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

Это сделает 2 индексом, однако он сохранит свой размер. Чтобы уменьшить его, добавьте RelativeSizeSpan а так вот так:

span.setSpan(new RelativeSizeSpan(0.75f), 3, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

Вам придется изменить свой ArrayList типа, хотя, либо CharSequence или же StringBuilder

Другие вопросы по тегам