概述
自己在学习控件的时候,学到关于EditText的addTextChangedListener()方法,想做一个类似发微博限制字数为140那样的功能,以此文记录上机过程中发现的一些问题。在做这个的时候,是第五节课视频刚提到addTextChangedListener()这个方法,所以以下仅仅是我自己上机的记录,不是课程的内容记录。
addTextChangedListener()初识
addTextChangedListener()是TextView的方法,
EditText继承自TextView,当然也有这个方法。
从官方的介绍可知,添加了TextWatcher后,
每当TextView的文本改变时,TextWatcher的那几个方法就会被调用。
另外一句,是关于在afterTextChanged(Editable)中setTest()的一些问题,
也就是在监测"改变后"状态的方法又去改变那个文本,这样想想都容易出问题,
不是我目前关心的内容,所以忽略。
关于TextWatcher那几个方法的解释
它那几个方法,分别监测了文本"改变前"、"改变时"、"改变中"三种状态。
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//这个方法被调用,说明在s字符串中,从start位置开始的count个字符即将被长度为after的新文本所取代。在这个方法里面改变s,会报错。
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//这个方法被调用,说明在s字符串中,从start位置开始的count个字符刚刚取代了长度为before的旧文本。在这个方法里面改变s,会报错。
}
@Override
public void afterTextChanged(Editable s) {
//这个方法被调用,那么说明s字符串的某个地方已经被改变。
}
});
beforeTextChanged()&onTextChanged()
具体解释一下,这里其实有点绕,最好自己上机观察。
1.增加字符的操作
例如,原来有4个字,我再输入2个字。
beforeTextChanged:start为4、count为0、after为2;
onTextChanged:start为4、before为0、count为2。
对于beforeTextChanged(),是从第4个字符的位置开始,
因为是增加操作,没有字符会被新字符替代,即0个字符即将被2个字符取代;
对于onTextChanged,是从第4个字符的位置开始,
因为是增加操作,没有字符会被新字符替代,即2个字符刚刚取代了长度为0的旧文本。
2.删除字符的操作
因为按←进行删除操作,只会一个个计算,效果不明显,我就直接剪切了3个字符。
beforeTextChanged:start为3、count为3、after为0;
onTextChanged:start为3、before为3、count为0。
对于beforeTextChanged(),是从第3个字符的位置开始,
因为是删除操作,取代原来字符的“新文本”长度为0,即3个字符即将被0个字符取代;
对于onTextChanged,是从第3个字符的位置开始,
因为是删除操作,取代原来字符的“新文本”长度为0,即0个字符刚刚取代了长度为3的旧文本。
多留一些数据,留着自己研究吧
操作
beforeTextChanged (s,start,count,after)
onTextChanged (s,start,before,count)
从无到有输入5个字符
0-0-5
0-0-5
5个字符,再输入3个字符,变8个字符
5-0-3
5-0-3
8个字符,删掉4个,剩4个字符
4-4-0
4-4-0
4个字符,删掉2个,剩2个字符
2-2-0
2-2-0
2个字符,输入3个,变5个字符
2-0-3
2-0-3
回到微博那个140字的功能
经过上面两个方法各种参数的折腾后,
我发现其实想要输入后有多少字,
直接用public void afterTextChanged(Editable s)就行了。
核心代码:
@Override
public void afterTextChanged(Editable s) {
int textSum = s.toString().length();
if(textSum<130){
textView.setText("");
}
if(textSum>=130&&textSum<=140){
textView.setText(String.valueOf(140-textSum));
textView.setTextColor(getResources().getColor(R.color.gray));
}
if(textSum>140){
textView.setText(String.valueOf(140-textSum));
textView.setTextColor(getResources().getColor(R.color.red));
}
}
上机的Gif(太大了,压缩过度):
看不了的点击这个链接
这个代码当然是烂,之后我再学习一下别人的吧。
继承接下来的课程,暂记录到这里吧。
参考资料
最后
以上就是犹豫大象为你收集整理的android addtextchangedlistener参数,【Android】关于addTextChangedListener()方法的上机记录...的全部内容,希望文章能够帮你解决android addtextchangedlistener参数,【Android】关于addTextChangedListener()方法的上机记录...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复