如何解决TextView的append方法如何调用SpannableStringBuilder的replace方法
我有这个自定义的SpannableStringBuilder
类:
public class ExpressionBuilder extends SpannableStringBuilder{
public ExpressionBuilder(CharSequence text){
super(text);
}
@Override
public SpannableStringBuilder replace(int start,int end,CharSequence tb,int tbstart,int tbend) {
// do something...
}
}
然后需要一个Editable.Factory
才能将TextView
转换为Editable
所需的SpannableStringBuilder
:
private final Editable.Factory editableFactory = new Editable.Factory() {
@Override
public Editable newEditable(CharSequence source) {
return new ExpressionBuilder(source);
}
};
然后将TextView
附加到Editable.Factory
:
myTextView.setEditableFactory(editableFactory);
以上代码的基本作用是,在将新字符串附加到TextView
时,将在replace()
中调用ExpressionBuilder
方法,并设置所有参数。我不了解append()
的{{1}}方法如何调用TextView
的{{1}}方法以及如何设置其参数。我搜索了文档,但没有找到任何解释。
请帮忙。谢谢。
解决方法
如果您查看Editable Inteface,将会看到以下内容:
/**
* Convenience for replace(length(),length(),text,text.length())
* @see #replace(int,int,CharSequence,int)
*/
public Editable append(CharSequence text);
/**
* Convenience for replace(length(),start,end)
* @see #replace(int,int)
*/
public Editable append(CharSequence text,int start,int end);
/**
* Convenience for append(String.valueOf(text)).
* @see #replace(int,int)
*/
public Editable append(char text);
因此,似乎在 TextView 上调用append()
确实会导致在后台调用replace()
。
如果我们通过在应用程序的onCreate()
方法中执行以下代码来仔细看看
textView.append("123")
我们可以看到进行了以下调用:
SpannableStringBuilder 的第291行位于append()
方法中,其内容为:
// Documentation from interface
public SpannableStringBuilder append(CharSequence text,int end) {
int length = length();
return replace(length,length,end);
}
在这里我们看到对append()
的调用导致对replace()
的调用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。