android addtextchangedlistener参数,【Android】关于addTextChangedListener()方法的上机记录...
自己在學習控件的時候,學到關于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()方法的上机记录...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cdn需要备案吗_车子贴改色膜需要到车管
- 下一篇: android camera2 采集,视