Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 964|回复: 0

书籍:Android TextView.BufferType.EDITABLE

[复制链接]

该用户从未签到

发表于 2011-10-24 11:30:31 | 显示全部楼层 |阅读模式
   注意到 TextView 控件设置文本时的参数有TextView.BufferType.EDITABLE 和 TextView.BufferType.SPANNABLE

       一、在 TextView 类中找到 setText 方法关于 BufferType 的主要代码:

java代码: // Editable 是一个接口。

private Editable.Factory mEditableFactory = Editable.Factory.getInstance();

private Spannable.Factory mSpannableFactory = Spannable.Factory.getInstance();
复制代码java代码: if (type == BufferType.EDITABLE || mInput != null || needEditableForNotification) {

Editable t = mEditableFactory.newEditable(text);

text = t;

setFilters(t, mFilters);

InputMethodManager imm = InputMethodManager.peekInstance();

if (imm != null) imm.restartInput(this);

} else if (type == BufferType.SPANNABLE || mMovement != null) {

text = mSpannableFactory.newSpannable(text);

} else if (!(text instanceof CharWrapper)) {

text = TextUtils.stringOrSpannedString(text);

}
复制代码二、带着上面的问题,在 TextView 类中找到下面的代码,提供了更换 Factory 的可能,使得开发者方便做不同的控件实现。

java代码: public final void setEditableFactory(Editable.Factory factory) {

mEditableFactory = factory;

setText(mText);

}

public final void setSpannableFactory(Spannable.Factory factory) {

mSpannableFactory = factory;

setText(mText);

}
复制代码三、那么如何自定义控件的实现呢,需要新写一个接口继承 Editable, 并且覆盖掉 Editable 中下面的方法:

java代码: public static class Factory {

private static Editable.Factory sInstance = new Editable.Factory();

public static Editable.Factory getInstance() {

return sInstance;

}

public Editable newEditable(CharSequence source) {

return new SpannableStringBuilder(source);

}

}
复制代码四、TextView.BufferType.EDITABLE 和 TextView.BufferType.SPANNABLE

        有什么区别呢?我们透过UML瞧一下, Editable 类似于StringBuilder可追加字符, 也就是说getText后可调用append方法设置文本内容。Spannable 则可在给定的字符区域使用样式。有意思的是 Editable 继承了 Spannable 所以具备较多的功能。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-18 23:47 , Processed in 0.414015 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表