android - Spannable 与字体与 Html

标签 android textview

我正在准备一个包含用于自定义样式(例如粗体、斜体、下划线、颜色等)的复选框的应用... 我对哪种方法对性能有好处感到有点困惑。我试过字体,但是当用户选择两个复选框时,它只显示最后一个值。效果不佳。

最佳答案

TypefacePaint 使用的图形元素用于绘制文本的对象。它指定字体(例如 MonospaceSans SerifSerif 等)和字体样式(例如 Bold, Italic, 等) 并被 Spannable 内部使用和 Html .

所以性能比较应该在SpannableHtml之间进行。

Html.fromHtml是一项成本较高的操作,因为它涉及解析 Html。 我将以下代码与 Traceview 一起使用并对 HtmlSpannable 进行了比较。它基本上将文本设置为粗体并设置超链接。

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: TraceView for Html API

用于 Spannable API 的 TraceView: TraceView for Spannable API

总结:从性能上看直接使用SpannableHtml要快

关于android - Spannable 与字体与 Html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23552437/

相关文章:

android - 使用 WebView 在 Android 应用程序中对齐文本但呈现类似 TextView 的界面?

java - Android ListView : Do Not Show TextView When Null

android - ConstraintLayout - 避免重叠

android画廊小部件无限滚动

java - 如何检查设备上是否安装了 ARCore lib/apk?

android gridlayout columnSpan 不跨越

android - 当 View 中有文本时,如何使 `android:hint` 不占用空间?

Android Spanned、SpannedString、Spannable、SpannableString 和 CharSequence

java - HttpURLConnection POST 请求抛出 IOException

android - AdvertisingIdClient.Info.getId() 在同一应用程序的重复安装中是否返回静态 ID?