Android 文本监听接口TextWatcher详解
TextWatcher是一個用來監聽文本變化的接口,使用該接口可以很方便的對可顯示文本控件和可編輯文本控件中的文字進行監聽和修改
TextWatcher接口中定義了三個方法:
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
該方法在文本改變之前調用,傳入了四個參數:
- CharSequence s:文本改變之前的內容
- int start:文本開始改變時的起點位置,從0開始計算
- int count:要被改變的文本字數,即將要被替代的選中文本字數
- int after:改變后添加的文本字數,即替代選中文本后的文本字數
該方法調用是在文本沒有被改變,但將要被改變的時候調用,把四個參數組成一句話就是:
在當前文本s中,從start位置開始之后的count個字符(即將)要被after個字符替換掉
public void onTextChanged(CharSequence s, int start, int before, int count) {}
該方法是在當文本改變時被調用,同樣傳入了四個參數:
- CharSequence s:文本改變之后的內容
- int start:文本開始改變時的起點位置,從0開始計算
- int before:要被改變的文本字數,即已經被替代的選中文本字數
- int count:改變后添加的文本字數,即替代選中文本后的文本字數
該方法調用是在文本被改變時,改變的結果已經可以顯示時調用,把四個參數組成一句話就是:
在當前文本s中,從start位置開始之后的before個字符(已經)被count個字符替換掉了
public void afterTextChanged(Editable s) {}
該方法是在文本改變結束后調用,傳入了一個參數:
- Editable s:改變后的最終文本
該方法是在執行完beforeTextChanged、onTextChanged兩個方法后才會被調用,此時的文本s為最終顯示給用戶看到的文本。我們可以再對該文本進行下一步處理,比如把文本s顯示在UI界面上
實踐
使用TextWatcher監聽EditText剩余可輸入文本字數
有個這樣的需求:用戶在EditText中只能輸入50個字符,在用戶輸入的同時在UI界面中告訴用戶還可輸入多少個字符
布局文件activity_main.xml
在以上布局中,EditText控件使用maxLength=”50”限制可輸入字符為50個
需要使用的控件和變量
/** 輸入框 */private EditText mTextContentEdt;/** 剩余字數 */private TextView mTextRemainTv;/** 已輸入字數 */private TextView mTextNowSumTv;/** 總可輸入字數 */private int textRemainAll = 50;輸入框樣式圖片bg_edit_radius.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"><stroke android:width="1dp"android:color="@android:color/black" /><corners android:radius="10dp" /><solid android:color="@android:color/darker_gray" /> </shape>初始化界面
/*** 初始化界面*/ private void initUI() {setContentView(R.layout.activity_main);mTextContentEdt = (EditText) findViewById(R.id.edt_text_content);mTextRemainTv = (TextView) findViewById(R.id.tv_text_remain);mTextNowSumTv = (TextView) findViewById(R.id.tv_text_now_sum); }給EditText添加監聽,MyTextWatcher類為我們自定義的監聽類
/*** 初始化監聽*/private void initListener() {mTextContentEdt.addTextChangedListener(new MyTextWatcher());}創建一個自定義的TextWatcher監聽類,實現TextWatcher接口
/*** 創建自己的TextWatcher監聽類*/ private class MyTextWatcher implements TextWatcher {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {// 已經輸入的字數mTextNowSumTv.setText(String.valueOf(s.length()));// 剩余可輸入字數int remainSum = textRemainAll - s.length();mTextRemainTv.setText(String.valueOf(remainSum));}@Overridepublic void afterTextChanged(Editable s) {} }運行后的效果圖
轉載請注明出處:http://blog.csdn.net/zhuwentao2150/article/details/51546773
總結
以上是生活随笔為你收集整理的Android 文本监听接口TextWatcher详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [css] 使用css3做一个魔方旋转
- 下一篇: 工作320:uni-预加载问题