概述
EditText控制输入字符限制的方法
1 EditText的inputType属性
inputType属性用于设置EditText的输入类型,如number,只能输入数字,软键盘为数字键盘
1.1 EditText的inputType属性的设置
- xml中设置
//……表示其他省略属性
<EditText ……
android:digits="0123456789"
android:inputType="number"
android:maxLength="11"
……/>
- java代码中设置
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
1.2 inputType属性中常用的值
xml中 | java中 | 说明 |
---|---|---|
text | InputType.TYPE_CLASS_TEXT | 文本 |
number | InputType.TYPE_CLASS_NUMBER | 数字,整数 |
numberDecimal | InputType.TYPE_NUMBER_FLAG_DECIMAL | 数字可以输入小数点 |
textPassword | InputType.TYPE_TEXT_VARIATION_PASSWORD | 密码输入 |
1.3 inputType属性可以控制的用户体验
- 对输入字符的限制,如number,只能输入数字,不能输入其他字符
- 软键盘的显示,如number,显示的都是数字,方便用户输入
2 EditText的digits属性
digits属性用于设置EditText可以输入的字符集合,如"0123456789",只能输入数字
1.1 digits属性的设置
- 只能在xml中设置
//……表示其他省略属性
<EditText ……
android:digits="0123456789"
android:inputType="number"
android:maxLength="11"
……/>
1.2 digits常用的集合
- 只允许输入数字,可用于手机号的输入:
android:digits="0123456789"
- 只允许输入数字和英文字母 ,可用于密码的输入:
android:digits="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
- 只允许输入数字,英文字母和@.两个符号,可用于邮箱的输入:
android:digits="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@."
3 EditText的maxLength属性
maxLength属性用于设置EditText的最大长度
- xml中设置
//……表示其他省略属性
<EditText ……
android:digits="0123456789"
android:inputType="number"
android:maxLength="11"
……/>
- java代码中设置
editText.setFilters(new InputFilter[] { new InputFilter.LengthFilter(11) });
4 EditText设置InputFilter过滤规则
InputFilter设置EditText文本过滤规则
4.1 系统提供的InputFilter的实现
//将所有的小写字符转化成大写
public static class AllCaps implements InputFilter
//对输入字符的最大长度做限制,对应 android:maxLength属性
public static class LengthFilter implements InputFilter
//一些InputType类型的字符限制基类
public abstract class NumberKeyListener extends BaseKeyListener
implements InputFilter
4.2 自定义InputFilter
InputFilter接口
editText.setFilters(new InputFilter[]{new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
Log.e(TAG, "filter-->source:" + source.toString() + " ,start:" + start + " ,end:" + end + " ;dest:" + dest.toString() + " ,dstart:" + dstart + " ,dend:" + dend);
return null;
}
}});
输入hello,删除hello。log如下
//输入hello
filter-->source:h ,start:0 ,end:1 ;dest: ,dstart:0 ,dend:0
filter-->source:he ,start:0 ,end:2 ;dest:h ,dstart:0 ,dend:1
filter-->source:hel ,start:0 ,end:3 ;dest:he ,dstart:0 ,dend:2
filter-->source:hel ,start:0 ,end:3 ;dest:hel ,dstart:0 ,dend:3
filter-->source:hell ,start:0 ,end:4 ;dest:hel ,dstart:0 ,dend:3
filter-->source:hell ,start:0 ,end:4 ;dest:hell ,dstart:0 ,dend:4
filter-->source:hello ,start:0 ,end:5 ;dest:hell ,dstart:0 ,dend:4
//删除hello
filter-->source:hell ,start:0 ,end:4 ;dest:hello ,dstart:0 ,dend:5
filter-->source:hel ,start:0 ,end:3 ;dest:hell ,dstart:0 ,dend:4
filter-->source:hel ,start:0 ,end:3 ;dest:hel ,dstart:0 ,dend:3
filter-->source:he ,start:0 ,end:2 ;dest:hel ,dstart:0 ,dend:3
filter-->source:he ,start:0 ,end:2 ;dest:he ,dstart:0 ,dend:2
filter-->source:h ,start:0 ,end:1 ;dest:he ,dstart:0 ,dend:2
filter-->source: ,start:0 ,end:0 ;dest:h ,dstart:0 ,dend:1
5 设置TextWather监听EditText的文本变化
TextWather监听EditText的字符变化
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
Log.e(TAG, "beforeTextChanged-->s:" + s.toString() + " ,start:" + start + " ,count:" + count + ",after:" + after);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.e(TAG, "onTextChanged-->s:" + s.toString() + " ,start:" + start + " ,before:" + before + ",count:" + count);
}
@Override
public void afterTextChanged(Editable s) {
Log.e(TAG, "afterTextChanged-->s:" + s.toString());
}
});
输入hello,删除hello。log如下
//输入hello
beforeTextChanged-->s: ,start:0 ,count:0,after:1
onTextChanged-->s:h ,start:0 ,before:0,count:1
afterTextChanged-->s:h
beforeTextChanged-->s:h ,start:0 ,count:1,after:2
onTextChanged-->s:he ,start:0 ,before:1,count:2
afterTextChanged-->s:he
beforeTextChanged-->s:he ,start:0 ,count:2,after:3
onTextChanged-->s:hel ,start:0 ,before:2,count:3
afterTextChanged-->s:hel
beforeTextChanged-->s:hel ,start:0 ,count:3,after:3
onTextChanged-->s:hel ,start:0 ,before:3,count:3
afterTextChanged-->s:hel
beforeTextChanged-->s:hel ,start:0 ,count:3,after:4
onTextChanged-->s:hell ,start:0 ,before:3,count:4
afterTextChanged-->s:hell
beforeTextChanged-->s:hell ,start:0 ,count:4,after:4
onTextChanged-->s:hell ,start:0 ,before:4,count:4
afterTextChanged-->s:hell
beforeTextChanged-->s:hell ,start:0 ,count:4,after:5
onTextChanged-->s:hello ,start:0 ,before:4,count:5
afterTextChanged-->s:hello
//删除hello
beforeTextChanged-->s:hello ,start:4 ,count:1,after:0
onTextChanged-->s:hell ,start:4 ,before:1,count:0
afterTextChanged-->s:hell
beforeTextChanged-->s:hell ,start:3 ,count:1,after:0
onTextChanged-->s:hel ,start:3 ,before:1,count:0
afterTextChanged-->s:hel
beforeTextChanged-->s:hel ,start:2 ,count:1,after:0
onTextChanged-->s:he ,start:2 ,before:1,count:0
afterTextChanged-->s:he
beforeTextChanged-->s:he ,start:1 ,count:1,after:0
onTextChanged-->s:h ,start:1 ,before:1,count:0
afterTextChanged-->s:h
beforeTextChanged-->s:h ,start:0 ,count:1,after:0
onTextChanged-->s: ,start:0 ,before:1,count:0
afterTextChanged-->s:
6 自定义EditText实现InputConnection
TextView实现下面两个方法来控制文本显示
//View.java
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return null;
}
public boolean onCheckIsTextEditor() {
return false;
}
可以实现自己的InputConnection 来控制字符,InputConnection接口定义了很多方法,这个已经很硬核,上面的方法已经能解决我们的问题了,这个知道就行
最后
以上就是从容灰狼为你收集整理的Android EditText控制输入字符限制的方法的全部内容,希望文章能够帮你解决Android EditText控制输入字符限制的方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复