我们正在开发化学的Android应用程序。我们正在使用Eclipse。
对于这个应用程序,我们需要编写这么多包含下标和上标支持的方程式来显示化学式的文本。
例如:H2O,ZnCl2应以适当的下标格式编写。怎么解决这个问题?
请回复。
答案 0 :(得分: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);
如果您需要上标文字,只需将SubscriptSpan
替换为SuperscriptSpan
,就像这样。
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);
希望这会有所帮助..
答案 1 :(得分: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或者如果您希望在公式中使用更有意义的符号,则可以使用转换表。