2

我们正在开发一个用于化学的安卓应用程序。我们为此使用 Eclipse。

对于这个应用程序,我们需要编写这么多包含下标和上标支持的方程来显示化学式的文本。

例如:H2O、ZnCl2 应以适当的下标格式书写。如何解决这个问题?

请回复。

4

2 回答 2

3

你可以SpannableStringBuilder这样使用..:-

TextView tv = (TextView)findViewById(R.id.mytext);//Your texView

        SpannableStringBuilder cs = new SpannableStringBuilder("H2O, ZnCl2");//Your suppose String
        cs.setSpan(new SubscriptSpan(), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);//Setting span index 
        cs.setSpan(new RelativeSizeSpan((float)0.75), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        cs.setSpan(new SubscriptSpan(), 9, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        cs.setSpan(new RelativeSizeSpan((float)0.75), 9, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.setText(cs);

如果你想要上标文本,那么只需SubscriptSpanSuperscriptSpan这样替换。

TextView tv = (TextView)findViewById(R.id.mytext);

        SpannableStringBuilder cs = new SpannableStringBuilder("H2O, ZnCl2");
        cs.setSpan(new SuperscriptSpan(), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        cs.setSpan(new RelativeSizeSpan((float)0.75), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        cs.setSpan(new SuperscriptSpan(), 9, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        cs.setSpan(new RelativeSizeSpan((float)0.75), 9, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.setText(cs);

希望这可以帮助..

于 2013-07-05T09:17:28.197 回答
0

对于这类事情,我更喜欢使用自定义字体(例如 DejaVuSans.ttf)。将 ttf 文件复制到 assets/fonts 中,然后像这样使用它:

           TextView ttt = (TextView) getActivity().findViewById(R.id.text);

           Typeface font = Typeface.createFromAsset(getActivity().getAssets(),"fonts/DejaVuSans.ttf");
           ttt.setTypeface(font);
           ttt.setText(textString);

然后在 textString 中嵌入 unicode 字符:例如

f(x)=x\u00B2+2x+3 或者如果您希望在公式中使用更有意义的符号,您可以使用转换表。

于 2013-07-05T10:01:05.193 回答