Jes*_*Jes 18 android keypad android-edittext
嗨,我想在Android的EditText键盘上只显示数字和字符,我确实尝试添加属性,android:inputType = text|number但它不起作用.
请帮助我提出任何其他更好的建议.提前致谢.
Aju*_*Aju 32
使用过滤器.这里我要添加过滤器代码.
EditText etName = (EditText)findViewById(R.id.etName);
InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (!Character.isLetterOrDigit(source.charAt(i))) {
return "";
}
}
return null;
}
};
etName.setFilters(new InputFilter[]{filter});
Run Code Online (Sandbox Code Playgroud)
Dyo*_*sos 21
尝试将digits参数添加到editText:
android:digits="abcde.....012345789"
Run Code Online (Sandbox Code Playgroud)
此处提供的解决方案InputFilter并非 100% 正确,因为如果输入中的一些有效字符位于无效字符旁边,它将替换并丢弃这些字符。
例如我们需要过滤掉所有特殊字符,您输入文本:olala[
EditText 字段会将整个olala[句子传递给过滤器,返回值将为“”,这意味着我们也丢弃了有效的olala 。
这是我的解决方案:
InputFilter filter = (source, start, end, dest, dstart, dend)->{
for (int i = start; i < end; i++) {
char symbol = source.charAt(i);
if (!isValidCharacter(symbol)) {
StringBuilder buf = new StringBuilder();
for(int j = start; j < end; j++)
{
symbol = source.charAt(j);
if(isValidCharacter(symbol)) buf.append(symbol);
}
return buf.toString();
}
}
return null;
};
Run Code Online (Sandbox Code Playgroud)
这里我们需要双循环,以避免为每个具有有效字符的方法调用分配 StringBuilder 的内存。
如果要添加空格,可以在最后一位数字后留出空格。
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 "
Run Code Online (Sandbox Code Playgroud)