在看TextView源码时候又看到了这两个接口:Spannable和Editable;

之前一直没有认真研究过两者的关系,现在看了源码记录下来。

1:两者属于继承关系,Editable继承于Spannable

Editable:

Spannable:

相较于Spannable,Editable还继承了另2个接口:CharSequence,Appendable。 CharSequence大家应该比较熟,看一下Appendable:

由图可见,Appendable这个接口,主要用来向CharSequence 添加/插入新的文本,通过其定义的方法可以看出其作用:

append(CharSequence csq)

append(CharSequence csq, int start, int end)

append(char c)

2:Spannable中主要方法

setSpan(Object what, int start, int end, int flags)

这个方法我们经常用,用于向文本设置/添加新的样式

removeSpan(Object what)

移除指定的样式,作用和setSpan相反

由此可见,Spannable作用是为CharSequence实例设置或者移除指定样式。

2:Editable中主要方法

Editable:

This is the interface for text whose content and markup can be changed: 可见,Editable接口关联的文本,不仅可以标记/设置样式,其内容也可以变化;

3:实际使用总结

如果一段文本,仅仅是样式发生变化,使用Spannable的子类SpannableString即可实现

如果一段文本,样式和内容都要发生变化,则必须使用Editable实例,我们最常用的应该就是SpannableStringBuilder.

调用TextView实例的setText方法时,type使用TextView.BufferType.EDITABLE,可以实现TextView中的文本不断的增加/更新(比如一些场景是需要向TextView实例中不断插入从网络获取的最新数据)

/**

* Sets the text that this TextView is to display (see

* {@link #setText(CharSequence)}) and also sets whether it is stored

* in a styleable/spannable buffer and whether it is editable.

*

* @attr ref android.R.styleable#TextView_text

* @attr ref android.R.styleable#TextView_bufferType

*/

public void setText(CharSequence text, BufferType type) {

setText(text, type, true, 0);

if (mCharWrapper != null) {

mCharWrapper.mChars = null;

}

}

示例代码:

.................

tv_setText = (TextView) findViewById(R.id.tv_setText);

bt_setText = (Button) findViewById(R.id.bt_setText);

tv_setText.setText("", TextView.BufferType.EDITABLE);

bt_setText.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Editable content = (Editable) tv_setText.getText();

content.append(":"+(insertIndex++));

}

});

}

int insertIndex = 0;

That's all !

android editable接口,Spannable与Editable区别相关推荐

  1. editable string 转_Java Editable.getSpans方法代码示例

    本文整理汇总了Java中android.text.Editable.getSpans方法的典型用法代码示例.如果您正苦于以下问题:Java Editable.getSpans方法的具体用法?Java ...

  2. java与ios的区别_好奇?Android与iOS究竟有什么区别?终于知道了!

    智能手机系统的发展从如今的百花齐放在到三足立鼎,而发展到了现在则是安卓与ios两家平分天下.谁的系统好用?到底是IOS好呢,还是安卓系统好呢?至今没有一个结果.那么Android与iOS到底有什么区别 ...

  3. Java中实现接口与继承的区别

    ** Java中实现接口与继承的区别 ** 首先,先来了解一下什么是接口和继承.接口一般是使用interface来定义的.接口定义同类的定义类似,分为接口的声明和接口体,其中接口体由常量定义和方法定义 ...

  4. sata接口_接口不同有啥区别?M.2和SATA接口SSD该选哪种?

    随着存储技术的快速发展,如今固态硬盘已是很多人电脑里不可或缺的一款硬件.在这场存储的革命中,为了实现更快的传输速度满足不同的需求,硬盘的接口经历了各种进化与革新,也便有了我们所熟之的 SATA.M.2 ...

  5. 面试题:接口和抽象类的区别

    区别一,两者表达的概念不一样.抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于"是"的关系:而接口是定义行为规范,因此对于实现接口的子类来说,相对于接 ...

  6. Qt for Android 调用android原生接口分享图片或文字

    在用Qt开发android应用的时候,有一个需求是通过调用android原生接口去实现图片分享功能,原理很简单,首先在java文件中用android接口封装一个分享功能的方法,然后在C++中调用QAn ...

  7. python接口和抽象类的区别_接口和抽象类有什么区别?

    最近团队在招人:阿里新零售事业群CBU技术部招Java高级&专家,团队主要负责B2B工业品牌业务,坐标杭州滨江,有兴趣的小伙伴私戳我. **************************** ...

  8. java 关注公众号没有调接口_高频面试题:接口和抽象类的区别

    作为一个基础的Java高频面试题,是所有Java面试者必须烂熟于心的.当然不能死记硬背,可以通过实际地写几个小demo,边实际操作边理解,既能感受到编程的快乐,更重要的是真的理解记住了二者的区别. 此 ...

  9. 抽象类和接口的共同点和区别

    抽象类和接口个共同点和区别: 共同点:  不能实例化,都可以被继承 不同点: 抽象类有构造器,单继承性 接口没有构造器,多继承性

最新文章

  1. 一次绕过360+诺顿的提权过程
  2. [BZOJ2818][P2568]Gcd[欧拉函数]
  3. 无源波分和彩光模块_【光电通信】无源波分在 5G 场景中 的应用分析
  4. MATLAB偏振光的反射与折射,仿真程序动画作品--光的反射与折射*
  5. Ext.tree.Panel示例
  6. 微信公众帐号开发教程第10篇-解析接口中的消息创建时间CreateTime
  7. 1458: 移动距离(暴力模拟)
  8. Expo大作战(三十八)--expo sdk api之 FileSystem(文件操作系统)
  9. echarts 设置地图外边框以及多个geo实现缩放拖曳同步
  10. java平均分排序_编写java程序,输入10个成绩,计算最高分,最低分,平均分,并按从小到大排序,最后统计高于平均分的人有多少?...
  11. java吸血鬼数字_吸血鬼数字(java)
  12. 最全C++知识点--重载运算与类型转换
  13. Python学习 Day31 DOM
  14. 如何上传项目到github
  15. “中国IT服务管理论坛”2010年全国巡讲拉开帷幕
  16. c语言编程求lnx怎么写,c语言里ln怎么写
  17. NOIP2009靶形数独
  18. 从零开始,轻松打造你的聊天机器人
  19. jq 数组不重复_JS Jquery去除数组重复元素
  20. c盘html文件能删除吗,c盘什么文件可以删除_c盘很乱不敢删怎么解决

热门文章

  1. C++入门、STL学习、二级C++等
  2. jtopo 告警 Alarm 换行 demo
  3. python 计算ssim
  4. Python基础知识(八):模块化、标准库、第三方库
  5. js 正则表达式大全
  6. 如何使用Node.js连接数据库
  7. 动力电池管理系统(BMS)策略与开发方法
  8. 【opencv初学者】3、sobel边缘检测
  9. Android Studio无法下载
  10. mac版app抓包软件charles百度云盘分享