- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章android同时控制EditText输入字符个数和禁止特殊字符输入的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了android同时控制EditText输入字符个数和禁止特殊字符输入的方法。分享给大家供大家参考。具体分析如下:
这里总结了三种方法如下:
方法一:
1. 引用两个命名空间:
1
2
|
import
android.text.TextWatcher;
import
android.text.Editable;
|
用于禁止特殊字符输入控制 。
定义EditText mEditText对象 。
2. 控制字符长度:
通过InputFilter过滤来实现字符长度控制,这样的好处是可以实现动态长度控制,而不是一个长度定值 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
int
mMaxLenth =
20
;
InputFilter[] FilterArray =
new
InputFilter[
1
];
FilterArray[
0
] =
new
InputFilter() {
@Override
public
CharSequence filter (CharSequence source,
int
start,
int
end,
Spanned dest,
int
dstart,
int
dend){
boolean
bInvlid =
false
;
int
sourceLen = getCharacterNum(source.toString());
int
destLen = getCharacterNum(dest.toString());
if
(sourceLen + destLen > mMaxLenth) {
return
""
; }
return
source;
}
};
mEditText.setFilters(FilterArray);
|
3. 禁止特殊字符输入:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
mEditText.addTextChangedListener(
new
TextWatcher() {
String tmp =
""
;
String digits =
"/\\:*?<>|\"\n\t"
;
@Override
public
void
onTextChanged(CharSequence s,
int
start,
int
before,
int
count) {
mEditText.setSelection(s.length());
}
@Override
public
void
beforeTextChanged(CharSequence s,
int
start,
int
count,
int
after) {
tmp = s.toString();
}
@Override
public
void
afterTextChanged(Editable s) {
String str = s.toString();
if
(str.equals(tmp)) {
return
;
}
StringBuffer sb =
new
StringBuffer();
for
(
int
i =
0
; i < str.length(); i++) {
if
(digits.indexOf(str.charAt(i)) <
0
) {
sb.append(str.charAt(i));
}
}
tmp = sb.toString();
mEditText.setText(tmp);
}
});
|
方法二:
1. 添加引用:
1
|
import
java.util.regex.*;
|
2. 定义函数:
1
2
3
4
5
6
|
public
static
String StringFilter(String str)
throws
PatternSyntaxException{
String regEx =
"[/\\:*?<>|\"\n\t]"
;
//要过滤掉的字符
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return
m.replaceAll(
""
).trim();
}
|
3. 添加监听事件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
mEditText.addTextChangedListener(
new
TextWatcher() {
@Override
public
void
onTextChanged(CharSequence s,
int
start,
int
before,
int
count) {
String t = mEditText.getText().toString();
String editable = mEditText.getText().toString();
String str = stringFilter(editable.toString());
if
(!editable.equals(str)){
mEditText.setText(str);
mEditText.setSelection(str.length());
//光标置后
}
}
@Override
public
void
beforeTextChanged(CharSequence s,
int
start,
int
count,
int
after) {
}
@Override
public
void
afterTextChanged(Editable s) {
}
});
|
方法三:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
int
mMaxLenth =
200
;
//设置允许输入的字符长度
public
static
String stringFilter(String str)
throws
PatternSyntaxException{
String regEx =
"[/\\:*?<>|\"\n\t]"
;
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return
m.replaceAll(
""
);
}
mEditText.addTextChangedListener(
new
TextWatcher() {
private
int
cou =
0
;
int
selectionEnd =
0
;
@Override
public
void
onTextChanged(CharSequence s,
int
start,
int
before,
int
count) {
cou = before + count;
String editable = mEditText.getText().toString();
String str = stringFilter(editable);
//过滤特殊字符
if
(!editable.equals(str)) {
mEditText.setText(str);
}
mEditText.setSelection(mEditText.length());
cou = mEditText.length();
}
@Override
public
void
beforeTextChanged(CharSequence s,
int
start,
int
count,
int
after) {
}
@Override
public
void
afterTextChanged(Editable s) {
if
(cou > mMaxLenth) {
selectionEnd = mEditText.getSelectionEnd();
s.delete(mMaxLenth, selectionEnd);
}
}
});
|
以上代码都经过测试,给大家共享!对于第一,二,两种方法在三星NOTE 2中会有个问题(其他手机没有问题),并且输入窗口会出现跳动;具体原因,感兴趣的朋友可以调试一下! 。
第三种方法没有问题.
希望本文所述对大家的Android程序设计有所帮助.
最后此篇关于android同时控制EditText输入字符个数和禁止特殊字符输入的方法的文章就讲到这里了,如果你想了解更多关于android同时控制EditText输入字符个数和禁止特殊字符输入的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我以一种特殊的方式收到以下错误。 The point at which the driver is attempting to click on the element was not scrolle
我有一些包含如下方法的编译库: public boolean foo(String userID) { Class ntSystemClass = Thread.currentThread()
假设我有下表 name | genre --------------------- book 1 | scifi book 2 | horror book 3
我正在用代码进行语言翻译。 self.title.text = [NSString stringWithFormat:NSLocalizedString(@"Q%ld", nil), (long)qu
我想这样做,但到目前为止,我所拥有的只是: print("Will you go out with me?") 我希望代码能够正常工作,以便人们可以回答“是/否”,如果回答是"is",则将返回一条消息
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How can I decode html characters in c#? 我有来自 HTML 的字符,
我想在 JavaScript 中对以下形式的字符串执行 ucwords(),它应该返回 Test1_Test2_Test3。 我已经在 SO 上找到了一个 ucwords 函数,但它只需要空格作为新词
“任何长度的正数表示为数字字符数组,因此介于‘0’和‘9’之间。我们知道最重要的密码位于数组索引 0 的位置。 例子: - 号码是 10282 - 数组将是数字 = [1,0,2,8,2] 考虑到这一
我目前正在开发一个显示特殊 unicode 字符(例如 ꁴ)的应用 现在我遇到了在旧设备上无法显示这些符号的问题。我如何知道它是否适用于当前设备? 我是否必须为每个 SDK 版本创建一个虚拟 Andr
在 HTML、XML 和部分 DTD 中,有两种特殊的标记结构: 以感叹号开头的标签结束,例如 和 以问号开头的标签 ,例如 和 我的问题是,这些构造类型中的每一种是否都有不同的名称,或者我是否必
我目前正在用 python 构建一个 shell。shell 可以执行 python 文件,但我还需要添加使用 PIPE 的选项(例如“|”表示第一个命令的输出将是第二个命令的输入)。 为了做到这一点
我的 MVC 项目中的路由无法正常工作... 我希望我所有的 View 都在 Views > Shared 文件夹中,如下所示: Error.cshtml (default) Index.cshtml
我有一个函数: public static ImageIcon GetIconImageFromResource(String path){ URL url = ARMMain.class.g
好的,所以我想在我的 html 页面中包含下面的字符。看起来很简单,只是我找不到它们的 HTML 编码。 注意:我想在没有大小元素的情况下执行此操作,纯文本就可以了 ^_^。 干杯。 最佳答案 你可以
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 3 年前。
我是 C# 的新手,正在尝试使用 ASP.Net GridView(框架 3.5),当 gridView 文本包含以下内容时,我发现了一个大问题: ñ/Ñ/á/Á/é/É/í/Í/ó/Ó/ú/Ú or
在 Java 中,我尝试编写一个正则表达式来匹配特殊类型的 HTTP URL: http:///# 所以字符串有 4 段: 字符串文字:“http://”;那么 任意 1 个以上字符的字符串;那么 字
当我写查询时,我在表中有“to”列 SELECT to FROM mytable mysql_error 返回错误,如果将单词to插入``引号,即 SELECT `to` FROM mytable 查
我遇到了一个问题。事实上,我使用越南语文本,我想找到每个包含大写字母(大写字母)的单词。当我使用“re”模块时,我的函数 (temp) 没有捕捉到像“Đà”这样的词。另一种方法 (temp2) 是一次
在我的文本中,我想用一个空格替换以下特殊字符: symbols = ["`", "~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_",
我是一名优秀的程序员,十分优秀!