如何在Android中的微调器上下标文本?

时间:2017-01-12 20:29:14

标签: android string spinner subscript-operator

我正在使用带有一些文本(String)的微调器,我想用下标的数字2写出化学表达式MgCl2。我该怎么做?

我看过一些帖子告诉我们使用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 个答案:

答案 0 :(得分:1)

您可以使用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的所有效果。

答案 1 :(得分:0)

您可以使用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类型更改为CharSequenceStringBuilder