Android中EditText设置输入条件
一、应用场景
之前做商城应用时,会有对用户资料的设置情况进行限制,如下:
(1)用户邮箱,应当只允许输入英文字母,数字和@.两个符号,
(2)用户手机,应当只能输入数字,禁止输入其他字符。
(3)用户密码,应当不能输入空格以及中文字符等。
二、解决方案
(1)EditText中的android:digits属性:
它表示EditText能够接受的字符集合。通过配置此属性,就可以实现只允许输入指定的字符。这里列举上述三种场景下的android:digits配置。
场景一:只允许输入数字 android:digits="0123456789"
场景二:只允许输入数字和英文字母 android:digits="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
场景三:只允许输入数字,英文字母和@.两个符号 android:digits="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@."
使用android:digits属性有几个需要注意的地方:
android:digits属性是隐藏的,无法直接在EditText的可视化属性列表中找到。只能直接在XML布局文件中配置。当在XML中增加了这项配置后,才可以在EditText的可视化属性列表中找到。
android:digits属性中的字符顺序没有影响,例如只允许输入数字时,可以用android:digits="0123456789",也可以用android:digits="9876543210"。
android:digits属性中允许有重复字符,有重复字符在使用效果上没有影响。例如android:digits="aaaAAA"和android:digits="aA"效果是一样的。
android:digits属性只能设置允许输入哪些字符,不能设置禁止输入哪些字符,也就是说android:digits属性只能设置白名单,不能设置黑名单。
(2)EditText中的android:inputType属性:
带有中文输入法的手机,通常输入法会有三种类型的软键盘:中文键盘,英文键盘和数字键盘,不同键盘类型之间可以切换。虽然android:digits属性可以让EditText中只允许输入指定类型的字符,但并不能控制软键盘弹出时的类型。例如在设置android:digits只允许输入数字时,可能弹出的软键盘是英文键盘或中文键盘,需要用户点击切换到数字键盘后才可以输入;在设置android:digits只允许输入英文和数字时,可能弹出的软键盘是中文键盘,同样需要用户点击切换到英文键盘和数字键盘后才可以输入。如果能在软键盘显示时就直接跳到对应键盘类型,不需要用户切换就更好了。
当设置android:inputType为number时,输入法开启时会自动切换到数字键盘。当设置为这里的其他几个选项时,输入法开启时会自动切换到英文字母键盘。这里列举上述三种场景下的android:inputType配置。
场景一:只允许输入数字 android:inputType="number"。实际上,当inputType设置为number后,EditText中就只能输入数字了,那么android:digits="0123456789"也不用设置了。 如果android:inputType="number"和android:digits同时设置,则实际可以输入的字符以android:digits配置为准。例如android:digits="01234567+-",则可以输入的字符为"01234567+-",这时如果同时设置了android:inputType="number",可以达到自动切换到数字键盘的目的。
场景二:只允许输入数字和英文字母 android:inputType="textVisiblePassword"。其他几个选项似乎都不太合适,textCapxxx的会有大小写的约束,textPassword显然只能用在密码输入框中,如果不介意软键盘中多几个符号,textEmailAddress倒也可以用在这里。
场景三:只允许输入数字,英文字母和@.两个符号 android:inputType="textEmailAddress"。
三、使用正则以及重写TextWatcher限制输入
(1)首先我自定义TextWatcher类
package com.example.panchengjia.limittext;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText; /**
* Created by panhouye on 2017/5/7 0007.
*/ public class LimitInputTextWatcher implements TextWatcher {
/**
* et
*/
private EditText et = null;
/**
* 筛选条件
*/
private String regex;
/**
* 默认的筛选条件(正则:不能输入中文和空格)
* \u4E00-\u9FA5匹配中文\u0020匹配空格
*/
private String DEFAULT_REGEX = "[\u4E00-\u9FA5\u0020]"; /**
* 构造方法
*
* @param et
*/
public LimitInputTextWatcher(EditText et) {
this.et = et;
this.regex = DEFAULT_REGEX;
} /**
* 构造方法
*
* @param et et
* @param regex 筛选条件
*/
public LimitInputTextWatcher(EditText et, String regex) {
this.et = et;
this.regex = regex;
} @Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override
public void afterTextChanged(Editable editable) {
String str = editable.toString();
String inputStr = clearLimitStr(regex, str);
et.removeTextChangedListener(this);
// et.setText方法可能会引起键盘变化,所以用editable.replace来显示内容
editable.replace(0, editable.length(), inputStr.trim());
et.addTextChangedListener(this); } /**
* 清除不符合条件的内容
*
* @param regex
* @return
*/
private String clearLimitStr(String regex, String str) {
return str.replaceAll(regex, "");
}
}
(2)Activity中的实现代码
package com.example.panchengjia.limittext; import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText et = (EditText) findViewById(R.id.et);
//使用LimitInputTextWatcher中默认的输入规则
et.addTextChangedListener(new LimitInputTextWatcher(et));
EditText ett = (EditText) findViewById(R.id.ett);
//设置只能输入中文
ett.addTextChangedListener(new LimitInputTextWatcher(ett,"[^\u4E00-\u9FA5]"));
}
}
Android中EditText设置输入条件的更多相关文章
- android的edittext设置输入限制,只能输入数字
EditText的属性里面已经封装好了相关的设置,上一篇文章里面也提到了,不熟悉的可以去查看上一篇EditText属性大全,这里着重讲输入限制的属性: android:digits="123 ...
- Android限定EditText的输入类型为数字或者英文(包括大小写),EditText,TextView只能输入两位小数
Android限定EditText的输入类型为数字或者英文(包括大小写) // 监听密码输入框的输入内容类型,不可以输入中文 TextWatcher mTextWatcher = new Tex ...
- 【转】Android中EditText中的InputType类型含义与如何定义
原文网址:http://www.crifan.com/summary_android_edittext_inputtype_values_and_meaning_definition/ 经过一些And ...
- 【整理】Android中EditText中的InputType类型含义与如何定义( 转 )
转自:[整理]Android中EditText中的InputType类型含义与如何定义 用到的时候查到了这篇文章觉得很不错,就在此记录下. [背景] 经过一些Android中EditText方面的折腾 ...
- Android中EditText显示明文与密文的两种方式
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录输入框显示.隐藏密码的简单布局以及实现方式. 效果图 代码分析 方式一 /**方式一:*/ private void sh ...
- Android中如何设置RadioButton在文字的右边,图标在左边
from:http://blog.csdn.net/sunnyfans/article/details/7901592?utm_source=tuicool&utm_medium=referr ...
- Android: EditText设置属性和设置输入规则
1.EditText输入限制规则 在xml:EditText 设置属性 android:digits="ABCDE123&*" ABCDE123&*是你的限制规则 ...
- Android中Edittext的属性
//此为转载别人的,挺不错的 1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" ...
- EditText设置输入的类型,只能输入纯数字,只能输入手机号码,只能输入邮箱等等。
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985转载请说明出处. 下面以数字.电话为例讲述EditText怎么设置输入类型,其他类型可以参考InputT ...
随机推荐
- Spring:利用PerformanceMonitorInterceptor来协助应用性能优化
前段时间对公司产品做性能优化,如果单依赖于测试,进度就会很慢.所以就通过对代码的方式来完成,并以此来加快项目进度.具体的执行方案自然就是要知道各个业务执行时间,针对业务来进行优化. 因为项目中使用了S ...
- Webpack 速成
前言 如果你已经对Webpack精通了或者至少一直在工作中使用它,请关闭当前浏览器标签,无视这篇文章. 这篇文章本意是写给我自己看的,作为一篇Cookbook供快速查询和上手用.原因是虽然工作中会涉及 ...
- 一个关于Python正则表达式的快速使用手册
一直在纠结自己的博客到底应该写一些什么东西,这几天发现自己的正则用的不是很熟练,于是想要写一篇关于正则表达式的博客,目的就是为了让自己以后要用而又不会的时候不至于像无头苍蝇一样到处乱撞. 有些人在碰到 ...
- 初识Object-C
Object-C是苹果推出用来开发苹果软件的一门编程语言.大学学了3年的JAVA,到了大四毅然决然的放弃JAVA,是因为第一次接触Object-C就被它的简单语法吸引了.其实不仅仅是语法简单,相对于A ...
- C#中关于WebBrowser的一些细节设置
在winform中有一个控件可以显示html的内容,该控件就是webbrowser,设置它的DocumenText属性为HTML的内容即可. 在使用WebBrowser做UI的时候,我们有时不希望里面 ...
- 老李推荐:第14章3节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化
老李推荐:第14章3节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer实例化 poptest是国内唯一一家培养测试开发工程师的培 ...
- 在IIS上部署你的ASP.NET Core项目
概述 与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kest ...
- shiro基础学习(四)—shiro与项目整合
一.认证 1.配置web.xml 2.配置applicationContext.xml 在applicationContext.xml中配置一个bean,ID和上面的过滤器的名称一致. ...
- jquery的冒泡事件event.stopPropagation()
js中的冒泡事件与事件监听 冒泡事件 js中“冒泡事件”并不是能实际使用的花哨技巧,它是一种对js事件执行顺序的机制,“冒泡算法”在编程里是一个经典问题,冒泡算法里面的冒泡应该 说是交换更加准确:js ...
- MongoDB基础教程系列--第七篇 MongoDB 聚合管道
在讲解聚合管道(Aggregation Pipeline)之前,我们先介绍一下 MongoDB 的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进行一系列操作,例如,求最 ...