日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android addtextchangedlistener参数,【Android】关于addTextChangedListener()方法的上机记录...

發布時間:2024/7/23 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()方法的上机记录...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。