- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
Android 提供了各种与文本和字符串相关的界面:Spanned
、SpannedString
、Spannable
、SpannableString
和 CharSequence
。
在使用 Html.fromHtml()
在 TextView
为了对其应用一些样式。
我试图从 Android 的官方文档中了解这些接口(interface)的用途/用法,但失败了,因为它非常令人困惑..这些接口(interface)的目的是什么?在哪些情况下最常使用它们?在哪些情况下最好避免使用它们?使用其中任何一种时,是否有任何明显的性能影响需要考虑?
如果有人能提供一个体面的解释,将不胜感激。
最佳答案
What is the purpose of these interfaces?
CharSequence
是表示字符序列的标准 Java 接口(interface)。 String
是 CharSequence
最常用的具体实现,其次是 StringBuilder
。
Spanned
是一个带有“spans”的 CharSequence
,表示应用于文本部分的格式,这些跨度不能被修改。
Spannable
是一个 Spanned
,增加了修改 span(添加或删除格式)的能力,但 不 修改文本本身。
SpannedString
是 Spanned
接口(interface)的具体实现。
SpannableString
是 Spannable
接口(interface)的具体实现。
in which scenarios is it mostly common to use them?
当存在返回 1 的方法时(例如,EditText
上的 getText()
)或当存在将 1 作为参数的方法时(例如, setText()
在 TextView
上)。
您引用的使用 Html.fromHtml()
的案例可能是传统 Android 开发中最常见的,作为带有 Spanned
的 TextView
重量比 WebView
轻得多。但是,还有其他用例,例如:
允许用户enter in rich text ,然后使用 Html.toHtml()
将该格式化文本保存在 HTML 再现中
In which cases is it best to avoid using them?
它们在对抗脱发、除雪、热泵维修、制作蛋奶酥等方面非常糟糕。
:-)
Are there any obvious performance impacts to be considered when using any one of them?
根据定义,接口(interface)没有“性能影响”——它们只是对 API 的描述。
我不知道 SpannableString
在任何特定操作中都比 SpannedString
慢得多。但是,SpannableStringBuilder
(除了格式化文本的 span 之外还允许操作文本)可能比 SpannableString
或 SpannedString
慢一些> 适用于各种事物。不过,性能差异是否足够重要将取决于使用情况。
关于Android Spanned、SpannedString、Spannable、SpannableString 和 CharSequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17546955/
场景 1: 我得到了 Set来自某处,这意味着我无法控制该集合的创建方式。 Set dataSet = GET_DATA_SET(); 我想转换 Set 中的数据至Set 。有没有一种有效的方法可以在
我一直认为 CharSequence[] 和 String[] 本质上是一样的,但是: 我有一些代码具有以下内容: CharSequence[] mEntries; ... String[] mEnt
存在类转换问题。请告诉我如何转换这个。我想要这个 ArrayList在我的 CharSequence[]名为 Contacts . java.lang.ClassCastException (在 An
setText(CharSequence, TextView.BufferType) 和 setText(CharSequence) 有什么区别,什么时候应该使用它们? 最佳答案 setText (C
虽然 String 实现了 CharSequence,但 Java 不允许这样做。做出此设计决定的原因是什么? 最佳答案 之所以禁止这样做是因为它不是类型安全的: public class MyEvi
我无法使用 API 26 更新应用。当我尝试运行项目时出现以下错误 错误: "ServerRunningNotification.java": error: cannot find symbol me
我有一个名为 customObjectList 的自定义对象列表。我想让它绑定(bind)到AlertDialog.Builder.setMultiChoiceItems(),需要先把它转换成Char
public void drawCities(ArrayList cities, Graphics page) { for(int i=0; i(TravelPanel.java:26) at
我需要显示一个对话框,其中包含可供选择的颜色列表。我找到了这个解决方案 here . CharSequence colors[] = new CharSequence[] {"red", "green
如何在Java中将String转换为CharSequence? 最佳答案 由于 String IS-A CharSequence,您可以在需要 的任何地方传递 String CharSequence,
我有一个 Map 并使用 转换为 charsequence[] final CharSequence[] treatmentNameList = treatmentListMap.keySet().t
我定义了以下CharSequence: final CharSequence[] videoQualities = {"any", "medium", "high", "hd"}; 我收到两个字符串值
为什么 String 类中的某些方法具有 CharSequence 类型的参数而其他方法具有 String 类型的参数,是否有逻辑解释? 例如: public String replace(CharS
这将返回一个空指针。 array[0].toString() 也是如此。我做错了什么? final CharSequence[] array = res.getTextArray(R.array.ar
我可以像这样组合两个 CharSequence 变量吗? if (status == 1) { for (int i = 0; i < get.length(); i++) {
有什么方法可以将 CharSequence 转换为 char 数组?为什么接口(interface)没有获取字符数组的方法? 最佳答案 我首先将 CharSequence 转换为 String 然后将
我有一个使用 charseqquence 的简单 Java 代码: static class baloon { CharSequence Titles[]; public
有这个代码: if (cs.equals(keywordUnderProcess)) { } else { } cs 和keywordUnderProcess 都是CharSequence,值为sta
CharSequence[] items = { “Google”, “Apple”, “Microsoft” }; 如果CharSequence是一个接口(interface),那么在上面的例子中我
我正在尝试遍历我的数组列表并打印无效的电子邮件地址。如果地址不包含@符号或句点,则无效。 我收到一个错误,int 无法转换为我的方法的 charsequence。 public static void
我是一名优秀的程序员,十分优秀!