大家對EditText這個控件并不陌生,它是一個可供我們輸入文本內容的輸入框。前些日子需要實現這樣一個需求:限制EditText中可以輸入的最大字符數為6,達到6時,用戶每按一次軟鍵盤就彈出一個Toast提示用戶,并且無法再輸入內容。就像下圖的效果:

一開始我是直接在布局文件中在使用android:maxLength的屬性將文本長度寫死,然后再到代碼中去監聽,但是這樣一來,監聽也就失去了意義了,因為無論用戶怎么輸入,EditText中容納的文本長度最長都是6,超過6時就不起作用了。所以我最終拋棄了這個寫法,不再把文本長度寫死了。現在就讓我們看看具體怎么實現吧。
新建一個工程,在MainActivity的布局里放置一個EditText:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.lindroid.edittextchangedemo.MainActivity"> <EditText android:id="@+id/edit" android:hint="請在此輸入內容" android:layout_width="match_parent" android:layout_height="wrap_content" /></RelativeLayout>然后到代碼中實現EditText中的輸入監聽事件,即接口TextWatcher中的方法。由于我們需要監聽的是文本長度的變化,也就是文本輸入過程中的變化,所以復寫onTextChanged方法即可:
public class MainActivity extends AppCompatActivity { PRivate EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText) findViewById(R.id.edit); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() > 6){ //判斷EditText中輸入的字符數是不是已經大于6 editText.setText(s.toString().substring(0,6)); //設置EditText只顯示前面6位字符 editText.setSelection(6);//讓光標移至末端 Toast.makeText(MainActivity.this, "輸入字數已達上限", Toast.LENGTH_SHORT).show(); return; } } @Override public void afterTextChanged(Editable s) { } }); }}代碼只有寥寥幾行,首先我們需要判斷用戶輸入的字符串長度是否已經超過了6(參數CharSequence 即EditText中輸入的字符串),如果超過了6,我們就只顯示前面6位字符,并彈出一條Toast告訴用戶 “輸入字數已達上限”,不能再輸入了。同時,為了用戶操作方便,比如可以刪除剛剛輸入的內容,我們將光標設置在文本的末端。
好了,整個Demo就這么簡單,其實我們就是把用戶輸入的內容先攔截下來,篩選之后再顯示到EditText上而已。
點擊下載Demo
新聞熱點
疑難解答