android editable接口,Spannable与Editable区别

article/2025/9/13 17:22:19

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

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

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

Editable:

31e10ca38bdf229dd69ac5052b509937.png Spannable:

8e5d022fc2c1b5df7f0a3180ce9e9b53.png

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

59e877c285041cd6932673e5a301fd75.png

由图可见,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:

9a92f451750503be21cbf0c587f413d9.png

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 !


http://chatgpt.dhexx.cn/article/xgeXin6s.shtml

相关文章

editable组件_表格行内编辑事件

1.简介 x-editable组件是一个适用于bootstrap(目前只更新到bootstrap3),jquery,jquery UI三种风格样式的弹出框编辑插件。本文根据项目需求主要介绍它在bootstrap-tabe中的应用。 x-editable开源地址:https://github.com/vitalets…

关于Editable的学习

Editable是EditText中用于获取字符串的一个类,里面的常用方法有 其实是一个类似字符串的类,常用的有append,delete 我们在这里删除用0到5位置的字符串,这个时候EditText上面显示的永远是从5开始以后的字符串

linux 开放5222端口,XMPP协议、IM、客户端互联详解

导读 对于推送,IM服务器,目前可以使用一些厂家提供的SDK来实现,但是我们的老板又总是担心使用别人的SDK,假如别人的服务出现问题,或者别人偷看咱们的信息,那岂不是出现很大问题了 聊一聊xmpp的服务器openfire和测试客户端spark 1、什么是XMPP 这里说一下XMPP,我在前几节说…

XMPP协议实现原理介绍

原文地址为: XMPP协议实现原理介绍 本文介绍XMPP协议原理及相关信息。 XMPP协议简介 XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messagin…

XMPP协议简介[转载]

1. 简介 XMPP来源于Jabber开源社区,基于XML,提供准实时的传递消息、在线状态和请求/响应服务。XMPP使用客户/服务模式,服务器之间能够相互连接,建立在面向连接的协议上,通常是TCP。 下图概要描述了XMPP架构&#xff1…

XMPP协议解析

XMPP国际标准的协议 可扩展的消息和展示的协议,是一种基础的开放式实时通信协议。可扩展新,强可读性。相比Email的发展史,163和qq邮箱之间的通信。为了兼容,符合同一种标准。即实现不同邮箱之间的通信。国内腾讯一家独大&#xf…

xmpp协议(即时通信协议规范)

转载自 https://www.cnblogs.com/jiyuqi/p/5085932.html 相关背景 IM(Instant Messaging)正在被广泛使用,特别是公司与它们的客户互动连接方案以及互联网与Web2.0相关的应用。为了解决即时通信的标准问题,IETF(互联网…

XMPP协议的原理介绍

XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人…

XMPP协议详解

原文链接:http://www.jianshu.com/p/a94749385755 xmpp协议详解一:xmpp基本概念 作者 riverli 关注 2015.07.30 14:22* 字数 3204 阅读 6104 评论 1 喜欢 17 概述 XMPP是一个开放式的XML协议,设计用于准实时消息和出席信息以及请求&#xff0…

物联网协议对比(HTTP、websocket、XMPP、COAP、MQTT和DDS协议)

目录 1、HTTP和websocket 2、XMPP 3、COAP 4、MQTT协议 5、DDS 对于物联网,最重要的是在互联网中设备与设备的通讯,现在物联网在internet通信中比较常见的通讯协议包括:HTTP、websocket、XMPP、COAP、MQTT 1、HTTP和websocket 在互联网…

XMPP基本概念

概述 XMPP是一个开放式的XML协议,设计用于准实时消息和出席信息以及请求-响应服务。 通用的架构 通常采用客户端服务器架构进行实现,其中客户端通过TCP方式使用XMPP访问服务器,服务器之间也采用TCP方式进行通信。 xmpp通用架构…

kafka的isr机制

Data Replication Kafka 的 Data Replication 需要解决如下问题: 怎样 Propagate 消息 在向 Producer 发送 ACK 前需要保证有多少个 Replica 已经收到该消息 怎样处理某个 Replica 不工作的情况 怎样处理 Failed Replica 恢复回来的情况 Propagate 消息 通过zook…

kafka-04数据同步原理ISR、ACK、LEO、HW

1. 分区策略 分区的原因 (1)方便在集群中扩展,每个 Partition 可以通过调整以适应它所在的机器,而一个 topic 又可以有多个 Partition 组成,因此整个集群就可以适应任意大小的数据了; (2&#…

Cisco ISR4221 路由器密码重置方法

【Cisco路由器重置】Cisco ISR4221 路由器密码重置方法 使用usb-console线连接路由器,使用secureCRT连接 记得使用串口serial模式,Port如果没有自动识别,可能是你没有安装FT232R USB UART驱动。教程:https://www.cnblogs.com/iBo…

KafKa - 分区副本ISR选举机制

一、KafKa分区副本ISR选举机制 kafka 中每一个主题又进一步划分成若干个分区。副本的概念实际上是在分区层级下定义的,每个分区配置有多若干个副本。 所谓的副本,本质上就是一个只能追加写消息的提交日志,根据kafka副本机制的定义&#xff…

Kafka 设计原理——副本与ISR设计

目录 副本与ISR设计Follower副本同步ISR设计 副本与ISR设计 一个Kafka分区本质就是一个备份日志,即利用多份相同的备份共同提供冗余机制来保持系统高可用性。 这些备份在Kafka中被称为副本(replica)。Kafka把分区的所有副本均匀地分配到所有broker上。 并从这些副本…

ISR吞吐性能问题

ISR大致可以分几类: Cisco 860、880、890 ISR1800 (fixed)、1800 (modular)、2800、3800 Series ISR1900、2900、3800、3900 Series ISR4K 每一代的设备,设备的性能肯定都不一样,本摘要,将主要记录ISR的吞吐性能问题。 1、下图主要…

生产故障|Kafka ISR频繁伸缩缩引发性能急剧下降原因分析

本文是笔者双十一系列第二弹,源于一个双十一期间一个让笔者猝不及防的生产故障,本文将详细剖析Kafka的副本机制,以及ISR频繁变更(扩张与伸缩)为什么会导致集群不可用。 1、Kafka副本机制 Kafka数据组织方式是topic-parition的结构&#xff…

关于kafka中ISR、AR、HW、LEO、LSO、LW的含义详解

kafka中的ISR、AR又代表什么?ISR伸缩又是什么? ​ 分区中的所有副本统称为AR(Assigned Repllicas)。所有与leader副本保持一定程度同步的副本(包括Leader)组成ISR(In-Sync Replicas&#xf…

c4isr系统有无服务器,什么是C4ISR系统?

C4ISR是指挥、控制、通信、计算机、情报、侦察与监视系统的英文简称,是美国各军兵种作战系统的大脑和神经。其主要功能是把作战系统各部分连接起来,构成一个灵活、机动、可靠、无缝的网络,确保各参战部队能依靠网络进行以网络为中心的现代化战…