Android EditText输入最大长度限制如何给用户以友好的提示
参考:
http://www.codes51.com/article/detail_156877.html
我们知道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>
View Code
设置最大长度为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;
publicclass MainActivity extends Activity {
private EditText editText = null;
private Toast toast = null;
@Override
publicvoid 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
publicvoid beforeTextChanged(CharSequence s, int start, int count,
int after) {
//TODO }
@Override
publicvoid onTextChanged(CharSequence s, int start, int before,
int count) {
//TODO }
@Override
publicvoid 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;
publicclass MainActivity extends Activity {
private EditText editText = null;
private Toast toast = null;
@Override
publicvoid 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{
privateint 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 "";
}elseif(keep >= end - start){
returnnull;
}else{
return source.subSequence(start,start + keep);
}
}
}
}
自定义类实现InputFilter,在filter方法中做长度判断,这样一来,当达到最大长度之后,继续输入字符的话,则每次都会弹toast提示。声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
