1、设置EditText的android:digits 属性, 这种方式可以指出要支持的字符。比如要限制只能输入数字和字母,可以这样
android:digits="1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

2、设置EditText的inputType属性,可以通过xml或者Java文件来设置。
假如我要设置为显示密码的形式,可以像下面这样设置:
在xml中,Android:inputType="textPassword"
在java文件中,可以用 ev.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

3、使用TextWather监听EditText的字符变化,当内容改变时删掉不想要的字符。说白了就是用户可以随便按键盘,在代码里马上删掉非法字符。
个人不太喜欢这种方式,太麻烦
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 i, int i1, 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()); //因为删除了字符,要重写设置新的光标所在位置
}
}

4、通过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, int i, int i1, 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;
}
}
});

利用InputFilter设置小数点后只能输入几位,这个比较好用。

5:使用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);
}
}
}

转自:http://blog.csdn.net/brycegao321/article/details/52277255

EditText 设置可以输入的字符,过滤不符合接口要求的数据的方法的更多相关文章

  1. android EditText 只允许输入指定字符

    实现只允许只入数字和字符 方法一:在XML文件中实现布局如下: <EditText android:layout_width="match_parent" android:l ...

  2. Android中EditText设置输入条件

    一.应用场景 之前做商城应用时,会有对用户资料的设置情况进行限制,如下: (1)用户邮箱,应当只允许输入英文字母,数字和@.两个符号, (2)用户手机,应当只能输入数字,禁止输入其他字符. (3)用户 ...

  3. Android限定EditText的输入类型为数字或者英文(包括大小写),EditText,TextView只能输入两位小数

    Android限定EditText的输入类型为数字或者英文(包括大小写) // 监听密码输入框的输入内容类型,不可以输入中文    TextWatcher mTextWatcher = new Tex ...

  4. 在EditText中限制输入,自定义样式,监听输入的字符,自动换行

    自动获取焦点 <!-- 添加:<requestFocus /> 会自动获取焦点 --> <EditText android:layout_width="matc ...

  5. EditText 限制输入,自定义样式,监听输入的字符,自动换行

    自动获取焦点 <!-- 添加:<requestFocus /> 会自动获取焦点 --> <EditText android:layout_width="matc ...

  6. Android编程 EditView 中如何设置最多可以输入的字符数量 属性 android:ems 与 android:maxLength 的区别

    最近有一个新的感悟,那就是工作的时候千万不要遇到那种特要人无语的领导,很不幸我现在就遇到了这样的一个领导,说是要给领导认识的一个熟人家的孩子写本科毕业设计预算把我给派过去给本科生写毕业设计,这事情的确 ...

  7. android 设置字体颜色、EditText自己主动输入转换成大写字母的多种方式

    在TextView上面设置某一个字的字体颜色为指定颜色时,能够通过java类SpannableString类和Html语言来实现. (一)SpannableString类方式 private void ...

  8. android的edittext设置输入限制,只能输入数字

    EditText的属性里面已经封装好了相关的设置,上一篇文章里面也提到了,不熟悉的可以去查看上一篇EditText属性大全,这里着重讲输入限制的属性: android:digits="123 ...

  9. Android: EditText设置属性和设置输入规则

    1.EditText输入限制规则 在xml:EditText 设置属性 android:digits="ABCDE123&*" ABCDE123&*是你的限制规则 ...

随机推荐

  1. linux c编程:gdb的使用

    首先用一个简单的打印字符的程序来做下示例 #include<stdio.h>#include<string.h>void main(){    int i=0;    char ...

  2. ABAP-创建货源清单

    CALL FUNCTION 'ME_DIRECT_INPUT_SOURCE_LIST' *&-------------------------------------------------- ...

  3. JS的事件流概念*******

    事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件侦听器来预订事件. 事件流 事件流描述的 ...

  4. ajax进度条

    .graph { width: 400px; height: 25px; border: 1px solid #f8b3d0; } .bar { background-color: #ffe7f4; ...

  5. STS、Eclipse报java.lang.OutOfMemoryError: PermGen space 内存溢出

    我使用的工具是STS, Eclipse同理: 打开如下界面: 左则选择项目启动使用的Tomcat-->在右侧面板Tab项中选择" Arguments":在VM argumen ...

  6. Appium——元素定位

    首先介绍两种定位元素的工具,appium自带的 Inspector 和 android SDK自带的 uiautomatorviewer 1.UIAutomator Viewer比较简单,在模拟器打开 ...

  7. 算法(Algorithms)第4版 练习 1.3.18

    1.3.18 Deletes from the list the node immediately following x.

  8. JAVA- 成员变量与局部变量的区别

    成员变量与局部变量的区别 成员变量是定义在方法之外,类之内的局部变量是定义在方法之内的. 作用上的区别: 1.成员变量的作用是用于描述一类事物的公共属性的. 2.局部变量的作用就是提供一个变量给方法内 ...

  9. java 创建 HMAC 签名

    ava 创建 HMAC 签名 psd素材 1. []ComputopTest.java package com.javaonly.hmac.test; import java.io.IOExcepti ...

  10. Promise 入门与使用

    Tags: ECMAScript6 参考资料 promises-book Promise对象 we-have-a-problem-with-promises Promise最初被提出是在 E语言中, ...