Android開發(fā)中給EditText控件添加TextWatcher監(jiān)聽實現(xiàn)對輸入字數的限制(推薦)
做這個功能是因為開發(fā)項目的時候,由于后臺接口的一些參數的值的長度有要求,不能超過多少個字符,所以在編輯框中輸入的字符是要有限制的。
下面就來看一下demo的實現(xiàn)過程:
首先,在xml控件中放置一個EditText控件,然后初始化該控件并對該控件添加文本監(jiān)聽。xml自己簡單的設計一下,代碼較為簡單,直接上代碼:
package com.example.edittext; import android.app.Activity; import android.os.Bundle; import android.widget.EditText; public class MainActivity extends Activity { private static final int LIMIT = 10;// 最大字數限制 private EditText et_word_limit;// EditText控件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 獲取EditText控件 et_word_limit = (EditText) findViewById(R.id.editText1); setListeners();// 編輯框添加文本監(jiān)聽 } private void setListeners() { // editText控件添加文本變化監(jiān)聽 et_word_limit.addTextChangedListener(new MyTextWatcher(et_word_limit, LIMIT, MainActivity.this)); } }
上面的代碼中給EditText控件添加文本監(jiān)聽的時候,我用的是自定義的TextWatcher,需要傳過去的參數有三個,方法為:
// editText控件添加文本變化監(jiān)聽 et_word_limit.addTextChangedListener(new MyTextWatcher(et_word_limit, LIMIT, MainActivity.this));
一個是EditText控件,即要添加監(jiān)聽的那個編輯框控件;
一個是字符的限制數目,即最多能在編輯框中輸入的內容;
一個是當前類的上下文對象。
當然,你要是還想再添加一個TextView控件實時顯示輸入的字符個數的話,那就再傳一個參數過去就行。反正具體需求,具體實現(xiàn)就行了,變化也不大,自己學會變通。
最關鍵的類,自定義的TextWatcher類如下,代碼如下:
package com.example.edittext; import android.content.Context; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.widget.EditText; import android.widget.Toast; /** * 自定義MyTextWatcher類實現(xiàn)TextWatcher接口,并重寫相關方法 * * @author 鄒奇 * */ public class MyTextWatcher implements TextWatcher { private int limit;// 字符個數限制 private EditText text;// 編輯框控件 private Context context;// 上下文對象 int cursor = 0;// 用來記錄輸入字符的時候光標的位置 int before_length;// 用來標注輸入某一內容之前的編輯框中的內容的長度 public MyTextWatcher(EditText text, int limit, Context context) { this.limit = limit; this.text = text; this.context = context; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { before_length = s.length(); } /** * s 編輯框中全部的內容 、start 編輯框中光標所在的位置(從0開始計算)、count 從手機的輸入法中輸入的字符個數 */ @Override public void onTextChanged(CharSequence s, int start, int before, int count) { cursor = start; // Log.e("此時光標的位置為", cursor + ""); } @Override public void afterTextChanged(Editable s) { // 這里可以知道你已經輸入的字數,大家可以自己根據需求來自定義文本控件實時的顯示已經輸入的字符個數 Log.e("此時你已經輸入了", "" + s.length()); int after_length = s.length();// 輸入內容后編輯框所有內容的總長度 // 如果字符添加后超過了限制的長度,那么就移除后面添加的那一部分,這個很關鍵 if (after_length > limit) { // 比限制的最大數超出了多少字 int d_value = after_length - limit; // 這時候從手機輸入的字的個數 int d_num = after_length - before_length; int st = cursor + (d_num - d_value);// 需要刪除的超出部分的開始位置 int en = cursor + d_num;// 需要刪除的超出部分的末尾位置 // 調用delete()方法將編輯框中超出部分的內容去掉 Editable s_new = s.delete(st, en); // 給編輯框重新設置文本 text.setText(s_new.toString()); // 設置光標最后顯示的位置為超出部分的開始位置,優(yōu)化體驗 text.setSelection(st); // 彈出信息提示已超出字數限制 Toast.makeText(context, "已超出最大字數限制", Toast.LENGTH_SHORT).show(); } } }
上面的代碼已經給出了注釋,說的也很明白,下面說說我的思路吧!
首先,這個自定義的類需要實現(xiàn)TextWatcher接口,并重寫相關的方法。
這時候,需要先知道編輯框沒有輸入內容之前里面的字符個數,需要知道輸入內容時候的光標所在的位置,需要知道輸入內容完畢后編輯框里的字符的個數。這些知道后就簡單了,最大限制數你是知道的;這時候只需要根據以上的一些數據來刪除超出部分字符就可以了。這個具體的實現(xiàn)方法寫在了
public void afterTextChanged(Editable s){}
重寫的方法里面,關鍵的注釋都有,大家可以好好的研究一下,說不定會有更加簡單的方法。
以上所述是小編給大家介紹的Android開發(fā)中給EditText控件添加TextWatcher監(jiān)聽實現(xiàn)對輸入字數的限制(推薦),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
相關文章
Android 實現(xiàn)圖片生成卷角和圓角縮略圖的方法
本篇文章主要介紹了Android 實現(xiàn)圖片生成卷角和圓角縮略圖的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11Android界面設計(APP設計趨勢 左側隱藏菜單右邊顯示content)
這文章講述了2013年未來的移動APP設計趨勢,感覺挺有道理的:Android界面設計實現(xiàn)左側隱藏菜單右邊顯示content,感興趣的你可以了解下啊,希望本文對你的APP設計提高有所幫助哦2013-01-01利用SpannableString和ImageSpan在textview中插入圖片的方法
這篇文章主要為大家詳細介紹了利用SpannableString和ImageSpan在textview中插入圖片的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11Android實現(xiàn)仿微軟系統(tǒng)加載動畫效果
這篇文章主要介紹了Android實現(xiàn)仿微軟系統(tǒng)加載動畫效果的方法,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下2021-04-04Android開發(fā) Activity和Fragment詳解
本文主要介紹Android開發(fā) Activity和Fragment,這里對Activity和Fragment的知識做了詳細講解,并附簡單代碼示例,有興趣的小伙伴可以參考下2016-08-08Flutter?Widget之NavigationBar使用詳解
這篇文章主要為大家介紹了Flutter?Widget之NavigationBar使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12