我正在开发一个Android项目,我想渲染一些化学公式。
我写了下面的代码,得到了以下结果。
我创建一个自定义字符串并在textview中显示它。
但我的问题是:这是最好的方法吗?还有另一种方法可以解决这个问题吗?
str = new SpannableString(Html.fromHtml("2H<sup>+</sup> + So<sub size = 2>4</sub><sup size = 2>2-</sup> --> H<sub size =2>2</sub>So<sub size = 2>4</sub>"));
ss1.setSpan(new RelativeSizeSpan(0.6f), 2,3, 0); // set size
ss1.setSpan(new RelativeSizeSpan(0.6f), 8,11, 0); // set size
ss1.setSpan(new RelativeSizeSpan(0.6f), 17,18, 0); // set size
ss1.setSpan(new RelativeSizeSpan(0.6f), 20,21, 0); // set size
TempF.setText(ss1,TextView.BufferType.SPANNABLE);
我不认为有更好的方法。
不幸的是Html.fromHtml()
忽略了<font size="n">
标签,所以这些跨度需要手动添加,就像你所做的那样。
我有一个类似的问题需要解决。我通过扩展WebView并在后台使用JavaScript创建了一个简单的库。 https://github.com/RanaRanvijaySingh/EquationView
String strChem = "Chemistry: \\(\\ce{CO2 + C -> 2 CO}\\)";
EquationView equationViewChem = findViewById(R.id.equationViewChem);
equationViewChem.setText(strChem);
在您的布局文件中:
<com.rana.equationview.EquationView
android:id="@+id/equationViewChem"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
希望这有助于某人。
我想你找到了一个适合你的解决方案。也许,如果有一个规则要知道符号何时是下标或上标,或者你必须使用的spansize,你可以编写一个方法来解析给定的字符串作为字符串并自动提供格式化的html输出。
要做到这一点,并假设有特定的规则,您可以使用有限状态机,将文本字符串“编译”到您需要的html输出。
如果您正在寻找这样的东西,请告诉我,我们也许能够解决这个问题。
另一个选择是查看(在Internet中)是否找到满足您需求的字体(或者可能构建自己的字体)。您可以导入将字体文件放在assets文件夹中的字体,并在源文件中设置它。