标签:
我们知道EditText有个属性android:maxLength="xxx" ,可以设置EditText的最大长度。
也可以用如下代码设置长度,editText.setFilters( new InputFilter[]{ new InputFilter.LengthFilter( 50 )});
然后我写个小示例,xml布局如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_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" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="请输入:" /> <EditText android:id="@+id/editText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:maxLength="15" /> </LinearLayout>
设置最大长度为15
MainActivity 如下:
package com.example.edittext; import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.Gravity; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText editText = null; private Toast toast = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText)findViewById(R.id.editText); editText.addTextChangedListener(textWatcher); } private TextWatcher textWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //TODO } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //TODO } @Override public void afterTextChanged(Editable s) { Log.d("TAG","afterTextChanged "+"str="+s.toString()); int len = s.toString().length(); if(len>=15){ toast = Toast.makeText(getApplicationContext(), "字符不能超过15个", 1000); toast.setGravity(Gravity.TOP, 0, 235); toast.show(); } } }; }
我们给EditText加上textChanged监听器,并在afterTextChanged中对已经输入文本的长度进行判断,当长度大于或者等于15时
我们给出提示字符不能超过15个,如下图、
但是,问题来了。提示完字符不能超过15个之后,假设我们再进行输入操作,这时候就不再提示了。
假设用户没有注意到弹的toast,而超过15个字符后用户还在输入,但是文本框却没有变化,造成体验就不好了。
我们希望的是超过15个字符后用户如果继续输入,我们依旧每次都提示他字符不能超过15个。
我们修改代码如下,
package com.example.edittext; import android.app.Activity; import android.os.Bundle; import android.text.InputFilter; import android.text.Spanned; import android.view.Gravity; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText editText = null; private Toast toast = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText)findViewById(R.id.editText); editText.setFilters(new InputFilter[]{new MaxTextLengthFilter(16)}); } class MaxTextLengthFilter implements InputFilter{ private int mMaxLength; public MaxTextLengthFilter(int max){ mMaxLength = max - 1; toast = Toast.makeText(MainActivity.this,"字符不能超过15个",1000); toast.setGravity(Gravity.TOP, 0, 235); } public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart ,int dend){ int keep = mMaxLength - (dest.length() - (dend - dstart)); if(keep < (end - start)){ toast.show(); } if(keep <= 0){ return ""; }else if(keep >= end - start){ return null; }else{ return source.subSequence(start,start + keep); } } } }
自定义类实现InputFilter,在filter方法中做长度判断,这样一来,当达到最大长度之后,继续输入字符的话,则每次都会弹toast提示。
Android EditText输入最大长度限制如何给用户以友好的提示
标签:
原文地址:http://www.cnblogs.com/sphere/p/4700140.html