我正在准备一个包含用于自定义样式(例如粗体、斜体、下划线、颜色等)的复选框的应用... 我对哪种方法对性能有好处感到有点困惑。我试过字体,但是当用户选择两个复选框时,它只显示最后一个值。效果不佳。
最佳答案
Typeface是 Paint 使用的图形元素用于绘制文本的对象。它指定字体(例如 Monospace
、Sans Serif
、Serif
等)和字体样式(例如 Bold
, Italic
, 等) 并被 Spannable 内部使用和 Html .
所以性能比较应该在Spannable
和Html
之间进行。
Html.fromHtml是一项成本较高的操作,因为它涉及解析 Html。
我将以下代码与 Traceview 一起使用并对 Html
和 Spannable
进行了比较。它基本上将文本设置为粗体并设置超链接。
Debug.startMethodTracing("htmlspan");
Spanned s1 = Html.fromHtml("<b>text1: Constructed from HTML programmatically.</b> Click <a href=\"http://www.google.com\">Link</a> ");
tv1.setText(s1);
Debug.stopMethodTracing();
tv1.setMovementMethod(LinkMovementMethod.getInstance());
Debug.startMethodTracing("normalspan");
SpannableString s2 = new SpannableString("text2: Constructed from JAVA programmatically. Click here.");
s2.setSpan(new StyleSpan(Typeface.BOLD), 0, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
s2.setSpan(new URLSpan("http://www.google.com"),53,53+4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv2.setText(s2);
Debug.stopMethodTracing();
tv2.setMovementMethod(LinkMovementMethod.getInstance());
结果:
- Html API:~14-15ms。(org.ccil.cowan.tagsoup.Parser.parse API 耗时约 12.282ms)
- Spannbale API:~1-2 毫秒。
Html API 的 TraceView:
用于 Spannable API 的 TraceView:
总结:从性能上看直接使用Spannable
比Html
要快
关于android - Spannable 与字体与 Html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23552437/