android设置输入框输入字符限制,Android EditText限制输入字符的方法总结
Android EditText限制输入字符的方法总结
最近项目要求限制密码输入的字符类型, 例如不能输入中文。 现在总结一下EditText的各种实现方式, 以比较各种方法的优劣。
第一种方式: 设置EditText的inputType属性,可以通过xml或者Java文件来设置。假如我要设置为显示密码的形式,可以像下面这样设置:
在xml中, Android:inputType="textPassword"
在java文件中,可以用 ev.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
inputType参数有phone、textPasswrod等等属性, 有兴趣的话可以测试一下。
第二种: 设置EditText的android:digits 属性, 这种方式可以指出要支持的字符。比如要限制只能输入数字和字母,可以这样:
android:digits="0123456789abcdefghijklmnopqrstuvwxyz"。
PS:吐槽一下,写着好累,不支持区间操作符~或-
第三种: 使用TextWather监听EditText的字符变化, 当内容改变时删掉不想要的字符。说白了就是用户可以随便按键盘,在代码里马上删掉非法字符。 PS: 常见的搜索功能输入框就是用TextWatcher监测关键词变化,然后查数据并显示出来了。示例代码:只能输入字母或者数字, 如果要支持其它字符可以修改regEx正则表达式。
evPwd = (EditText) findViewById(R.id.ev_password);
evPwd.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence,int i,int i1,int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence,int i2) {
String editable = evPwd.getText().toString();
String regEx = "[^a-zA-Z0-9]"; //只能输入字母或数字
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(editable);
String str = m.replaceAll("").trim(); //删掉不是字母或数字的字符
if(!editable.equals(str)){
evPwd.setText(str); //设置EditText的字符
evPwd.setSelection(str.length()); //因为删除了字符,要重写设置新的光标所在位置
}
}
第四种:通过InputFilter来实现。实现InputFilter过滤器, 需要覆盖一个叫filter的方法。
public abstract CharSequence filter (
CharSequence source,//输入的文字
int start,//开始位置
int end,//结束位置
Spanned dest,//当前显示的内容
int dstart,//当前开始位置
int dend //当前结束位置
);
注意: IntentFilter是个数组, 也就是说可以写多个过滤条件!
下面的实现使得EditText只接收字符(数字、字母),Character.isLetterOrDigit会把中文也当做Letter, 所以要在写个正则判断是否中文。
evPwd.setFilters(new InputFilter[]{
new InputFilter() {
@Override
public CharSequence filter(CharSequence charSequence,Spanned spanned,int i2,int i3) {
String regex = "^[\u4E00-\u9FA5]+$";
boolean isChinese = Pattern.matches(regex,charSequence.toString());
if (!Character.isLetterOrDigit(charSequence.charAt(i)) || isChinese) {
return "";
}
return null;
}
}
});
第五种: 使用EditText的InputConnection属性限制输入字符。 新建个类继承于EditText并覆盖onCreateInputConnection函数, 在xml里使用LimitText替换EditText。
public class LimitEditText extends EditText {
public LimitEditText(Context context) {
super(context);
}
public LimitEditText(Context context,AttributeSet attrs) {
super(context,attrs);
}
public LimitEditText(Context context,AttributeSet attrs,int defStyleAttr) {
super(context,attrs,defStyleAttr);
}
/**
* 输入法
* @param outAttrs
* @return
*/
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return new InnerInputConnecttion(super.onCreateInputConnection(outAttrs),false);
}
class InnerInputConnecttion extends InputConnectionWrapper implements InputConnection {
public mInputConnecttion(InputConnection target,boolean mutable) {
super(target,mutable);
}
/**
* 对输入的内容进行拦截
*
* @param text
* @param newCursorPosition
* @return
*/
@Override
public boolean commitText(CharSequence text,int newCursorPosition) {
// 只能输入字母或者数字
if (!Character.isLetterOrDigit(charSequence.charAt(i)) || isChinese) {
return false;
}
return super.commitText(text,newCursorPosition);
}
@Override
public boolean sendKeyEvent(KeyEvent event) {
return super.sendKeyEvent(event);
}
@Override
public boolean setSelection(int start,int end) {
return super.setSelection(start,end);
}
}
}
以上是EditText输入限制的所有方法, 大家如有疑问,请留言或到本站社区讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
android设置输入框输入字符限制,Android EditText限制输入字符的方法总结相关推荐
- android设置输入框输入字符限制,Android里限制EditText控件可以输入字符内容的范围的方法...
介绍 介绍 福哥在制作APP的时候,需要限制文本输入框可以输入的内容.经过一顿研究,发现了digits这个属性.使用digits属性可以限制输入框接受的字符类型和范围,范围之内的可以被输入,范围之外的 ...
- android textview点击部分,Android开发第二大控件,EditText的属性和使用方法
EditText与TextView非常相似,它甚至与TextView 共用了绝大部分XML属性和方法.EditText与TextView的最大区别在于:EditText可以接受用户输入. 一.Edit ...
- android 设置键盘弹出动画,Android实现键盘弹出界面上移的实现思路
1.首先说一下思路: 基本就是结合layout中ScrollView视图和AndroidManifest.xml中activity中的android:windowSoftInputMode属性配置实现 ...
- android设置悬浮窗口的透明度,Android TransparentActivity 悬浮窗兼容方案
一.方案说明 方案对比: Overlay方案: 1. <> overlay悬浮窗功能比较强大,支持很多交互. 2.部分手机(如小米)不支持指纹识别等安全校验,因为有悬浮窗权限的app对需要 ...
- android 设置功能,NDK 使用入门 | Android NDK | Android Developers
原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 Activity 和访问实体设备组件,例如传感器和触摸 ...
- android设置控件的坐标,Android中使PopupWindow显示在指定控件的上下左右!
**1.View中的方法getLocationOnScreen(int[] location):获取该控件在屏幕中的绝对坐标并将坐标保存在数组中:如下图所示,A为屏幕的原点,R,C点即为view的绝对 ...
- android 设置单边框,详解Android用Shape制作单边框图的两种思路和坑
开发中遇到单/多边框的UI,简单的可以自己写shape图,复杂的一般都让设计配合制作9patch图了. 今天不说需要切图的情况,只聊简单的单/多边框,主要是实现思路. 效果很简单: 就以上图为例介绍, ...
- android设置应用字体大小,在Android应用程序改变的TextView的字体大小从原始设置更改字体大小(Font size...
我想在我的应用程序指定我自己的文字大小,但我有这样一个问题. 当我在设备设置中更改字体大小,我的应用程序的字体大小TextView也会改变. Answer 1: 其实,设置字体大小只影响大小sp . ...
- android 设置字体大小和不同颜色,Android代码中设置字体大小,字体颜色,显示两种颜色.倒计时效果...
Android代码中设置字体大小,字体颜色,显示两种颜色 在xml文件中字体大小用的像素 android:id="@+id/uppaid_time" android:layout_ ...
最新文章
- java redis管理_优雅时间管理Java轻松做到,想学么?
- Java类加载器详解
- python kafka消费最新数据_python kafka消费数据库
- 《Lua程序设计》第6章 深入函数 学习笔记
- Bag of Word
- js 停止事件冒泡 阻止浏览器的默认行为
- 请问一个表的update能同时触发两个触发器吗?
- 流式计算框架Storm 编程案例部署Linux结果演示及pom依赖
- java dom添加节点_java用dom更新xml的有关问题,如何在子节点上添加节点
- tomcat9-jenkins:insufficient free space available after evicting expired cache entries-consider
- cuda支持 java_cuda运行时错误(48):没有内核映像可用于在设备上执行
- 龙讯2号 我用带有胡伟武签名的龙芯电脑
- 代码进行insmod/rmmod操作
- vlc播放g711 rtp流媒体sdp文件及其参数介绍
- X3D代码理解之demo(cfg)
- oracle数据误删怎么恢复,Oracle数据误删了怎么恢复
- BOM中的location对象
- U盘文件变成快捷方式的解决方案
- xmanager连接linux终端,Xmanager连接CentOS 7远程桌面
- Day3 分支和循环
热门文章
- 《复联4》| 生活需要漫威这块糖
- python二叉树去重_python二叉树学习分享
- uniapp 仿钉钉考勤统计页面的日历组件,通过日历展示每日考勤打卡情况,支持在日历上打两种不同类型的点,大致适配各种分辨率
- SpringBoot2 中 spring.http.multipart.max-file-size 报错问题
- Springboot/Cloud集成Sentinel进阶实战
- SonarQube 质量配置,设置各个语言默认的扫描规则
- Java List集合转换相关操作
- wxpython富文本_去除富文本编辑器中的标签
- java 纳秒 毫秒_golang的time包:秒、毫秒、纳秒时间戳输出方式
- html 页面重复度高,html – CSS背景渐变重复问题