Android開發中給EditText控制項添加TextWatcher監聽實現對輸入字數的限制(推薦)_Android

來源:互聯網
上載者:User

 做這個功能是因為開發項目的時候,由於後台介面的一些參數的值的長度有要求,不能超過多少個字元,所以在編輯框中輸入的字元是要有限制的。

下面就來看一下demo的實現過程:

首先,在xml控制項中放置一個EditText控制項,然後初始化該控制項並對該控制項添加文本監聽。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控制項@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 擷取EditText控制項et_word_limit = (EditText) findViewById(R.id.editText1);setListeners();// 編輯框添加文本監聽}private void setListeners() {// editText控制項添加文本變化監聽et_word_limit.addTextChangedListener(new MyTextWatcher(et_word_limit, LIMIT, MainActivity.this));}}

上面的代碼中給EditText控制項添加文本監聽的時候,我用的是自訂的TextWatcher,需要傳過去的參數有三個,方法為:

// editText控制項添加文本變化監聽et_word_limit.addTextChangedListener(new MyTextWatcher(et_word_limit, LIMIT, MainActivity.this));

一個是EditText控制項,即要添加監聽的那個編輯框控制項;

一個是字元的限制數目,即最多能在編輯框中輸入的內容;

一個是當前類的內容物件。

當然,你要是還想再添加一個TextView控制項即時顯示輸入的字元個數的話,那就再傳一個參數過去就行。反正具體需求,具體實現就行了,變化也不大,自己學會變通。

最關鍵的類,自訂的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類實現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;}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {before_length = s.length();}/*** s 編輯框中全部的內容 、start 編輯框中游標所在的位置(從0開始計算)、count 從手機的IME中輸入的字元個數*/@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {cursor = start;// Log.e("此時游標的位置為", cursor + "");}@Overridepublic 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());// 設定游標最後顯示的位置為超出部分的開始位置,最佳化體驗text.setSelection(st);// 彈出資訊提示已超出字數限制Toast.makeText(context, "已超出最大字數限制", Toast.LENGTH_SHORT).show();}}}

上面的代碼已經給出了注釋,說的也很明白,下面說說我的思路吧!

首先,這個自訂的類需要實現TextWatcher介面,並重寫相關的方法。

這時候,需要Crowdsourced Security Testing道編輯框沒有輸入內容之前裡面的字元個數,需要知道輸入內容時候的游標所在的位置,需要知道輸入內容完畢後編輯框裡的字元的個數。這些知道後就簡單了,最大限制數你是知道的;這時候只需要根據以上的一些資料來刪除超出部分字元就可以了。這個具體的實現方法寫在了

public void afterTextChanged(Editable s){} 

重寫的方法裡面,關鍵的注釋都有,大家可以好好的研究一下,說不定會有更加簡單的方法。

以上所述是小編給大家介紹的Android開發中給EditText控制項添加TextWatcher監聽實現對輸入字數的限制(推薦),希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對雲棲社區網站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.