我创建了一个数组,然后将其加载到HashMap中,然后我在ExpandableListView中使用它.但是,我想让部分数据显示下标和上标用于指数.经过大量的谷歌搜索,上标和下标的解决方案似乎使用这样的东西:
text.setText(Html.fromHtml(getString(R.string.acceleration)))
在存储在引用中的字符串对象中使用HTML格式化.但是,这可以使用TextView或按钮,而不是ListView.问题是我现在意识到这实际上创建了一个Spannable对象,我对它知之甚少,但是理解它不是一个字符串,所以我不能把它添加到我的数组中的字符串末尾就像我原以为.
我的数组看起来像这样:
constant_common_data = new ListViewItem[] { new ListViewItem(R.drawable.star,"Atomic Mass Constant ","1.660 539 040 e-27","kg","0.000 000 020 e-27"),new ListViewItem(R.drawable.star,"Avogadro Constant","6.022 140 857 e23"," mol^-1","0.000 000 074 x e23"),"Boltzmann Constant","1.380 648 52 e-23","K^-1","0.000 000 79 e-23"),"Conductance Quantum","7.748 091 7310 e-5","s","0.000 000 0018 e-5"),"Electric Constant","8.854 187 817... e-12","F m^-1","(exact)"),"Electron mass","9.109 383 56 e-31","0.000 000 11 e-31"),"Electron volt","1.602 176 6208 e-19"," J","0.000 000 0098 e-19"),"Elementary charge ","C","Faraday constant ","96 485.332 89 e-5","C mol^-1","0.000 59"),"Fine-structure constant ","7.297 352 5664 e-3"," ","0.000 000 0017 e-3"),"Inverse fine-structure constant","137.035 999 139","0.000 000 031"),"Magnetic constant","4pi e-7 = 12.566 370 614... e-7"," N A^-2","Magnetic Flux Quantum","2.067 833 831 e-15","Wb","0.000 000 013 e-15"),"Molar Gas constant","8.314 4598","J mol^-1 K^-1","0.000 0048"),"Newtonian constant of gravitation ","6.674 08 e-11","m^3 kg^-1 s^-2","0.000 31 e-11"),"Planck constant","6.626 070 040 e-34","J s","0.000 000 081 e-34"),"Planck constant over 2 pi","1.054 571 800 e-34"," J s","0.000 000 013 e-34"),"Proton Mass","1.672 621 898 e-27","0.000 000 021 e-27"),"Proton-Electron Mass Ratio","1836.152 673 89","0.000 000 17"),"Rydberg constant","10 973 731.568 508","m^-1","0.000 065"),"Speed of Light in Vacuum","299 792 458","m s^-1","Stefan-Boltzmann constant","5.670 367 e-8","Wm^-2 K^-4","0.000 013 e-8"),"Bohr Radius","0.529 177 210 67 e-10","m","0.000 000 000 12 e-10"),"Bohr Magneton ","927.400 9994 e-26"," J T^-1","0.000 0057 e-26"),"Josephson constant","483 597.8525 e9","Hz V^-1","0.0030 e9"),"Von Klitzing constant","25 812.807 4555","Ohm","0.000 0059"),"Unified Atomic Mass Unit","1.660 539 040 e-27"+ test,"0.000 000 020 e-27") };}
您可以看到每个ListViewItem都将Strings作为参数,然后在将所有内容加载到列表后,我调用此处显示的ListViewItem类的toString方法:
public String toString() { return "Value: " + this.value + "\nUnits: " + this.unit + "\nStandard Uncertainty: " + this.uncertainty; }
显示在ExpandableListView的下拉部分.我希望我进入ListViewItem的参数能够像这样被打印,但我也希望它们使用sub和super脚本进行格式化.
我的问题是,有没有办法将Spannable对象转换为String,所以我可以将它包含在String参数中,让对象返回它,仍然是样式的toString()方法?
谢谢,我感谢所有的帮助.
解决方法
经过大量搜索,我找到了以下解决方案:
首先,为了将Spannable转换为String对象,我使用了:
Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY);
这个方法将返回一个Spannable(当然),在这里你可以使用toString()方法来生成你的String:
String yourString = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY).toString();
如果需要将HTML转换为String(删除标记),可以使用此解决方案:
public String stripHtml(String html) { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { return Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY); } else { return Html.fromHtml(html); } }