0

我正在使用带有一些文本(字符串)的微调器,并且我想编写带有数字 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);
4

2 回答 2

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任何具体类型的所有效果。

于 2017-01-12T21:06:28.107 回答
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类型,CharSequence要么StringBuilder

于 2017-01-12T21:13:38.750 回答