android - 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
需要将 aTextView
转换为Editable
所需的a 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()
TextView
replace()
SpannableStringBuilder
解决方案
如果您查看可编辑界面,您将看到以下内容:
/**
* Convenience for replace(length(), length(), text, 0, text.length())
* @see #replace(int, int, CharSequence, int, int)
*/
public Editable append(CharSequence text);
/**
* Convenience for replace(length(), length(), text, start, end)
* @see #replace(int, int, CharSequence, int, int)
*/
public Editable append(CharSequence text, int start, int end);
/**
* Convenience for append(String.valueOf(text)).
* @see #replace(int, int, CharSequence, int, int)
*/
public Editable append(char text);
因此,看起来append()
对TextView的调用确实会导致replace()
对引擎盖下的调用。
onCreate()
如果我们通过在应用程序的方法中执行以下代码来仔细查看
textView.append("123")
我们可以看到进行了以下调用链:
SpannableStringBuilder的第 291行在append()
方法中,内容如下:
// Documentation from interface
public SpannableStringBuilder append(CharSequence text, int start, int end) {
int length = length();
return replace(length, length, text, start, end);
}
在这里,我们看到对的调用append()
导致对 的调用replace()
。
推荐阅读
- swift - 如何在初始化后自动异步设置现有结构的新属性?
- javascript - 如何使用来自 React Router 和 Redux 的 Props 从服务器获取数据
- mongoose - 在执行查询之前验证
- javascript - 如何将选定的选项值添加到 HTML 表单中的 jQuery 多选?
- python - 在 groupby 和操作子数据帧之后保持其他列值不变
- python-3.x - 如果路径包含空格 %20,如何在 jupyter note 中保存 python 文件
- javascript - 如何在Angular中过滤嵌套数组中的数据
- python - 使用 Tkinter 保存图像时 PIL Python 模块抛出错误
- javascript - 如何以角度显示和隐藏用纯html和css制作的模态?
- javascript - React Router:不要更改特定页面的 URL