您好我想在Android上的EditText键盘上只显示数字和字符,我确实尝试添加属性android:inputType = text|number
,但它不起作用。
请帮助我提出任何其他更好的建议。提前谢谢。
答案 0 :(得分:30)
使用过滤器。这里我要添加过滤器的代码。
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});
答案 1 :(得分:20)
尝试将digits参数添加到editText:
android:digits="abcde.....012345789"
答案 2 :(得分:3)
如果您想添加空格,可以在最后一位数字后面留出空格。
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 "
答案 3 :(得分:2)
尝试使用这种方法对我有用:
### "manual" palette with transparency
reset session
# These are the rgb formulae behind palette 22,13,-22
set angle degrees
r(x) = 3*x-1 < 0 ? 0: (3*x-1 > 1) ? 1 : 3*x-1
g(x) = sin(180*x)
b(x) = 1-(3*x-1) < 0 ? 0: (1-(3*x-1) > 1) ? 1 : 1-(3*x-1)
set xrange [0:1]
set yrange[-0.1:1.1]
RandomSize(n) = rand(0)*4+2 # random size from 2 to 6
RandomTransp(n) = int(rand(0)*0xff)<<24 # random transparency from 0x00 to 0xff
myColor(x) = (int(r(x)*0xff)<<16) + (int(g(x)*0xff)<<8) + int(b(x)*0xff) + RandomTransp(0)
set samples 200
plot '+' u (x=rand(0)):(rand(0)):(RandomSize(0)):(myColor(x)) w p pt 7 ps var lc rgb var not
### end of code
为此行添加您的编辑文字
public static InputFilter[] getFilter(String blockChars) {
return new InputFilter[]{(source, start, end, dest, dstart, dend) -> {
for (int i = start; i < end; i++) {
if (source != null && blockChars.contains("" + source.charAt(i))) {
return source.subSequence(start, i);
}
}
return null;
}};
答案 4 :(得分:1)
此处提供的IClientValidatable
解决方案并非100%正确,因为如果它们位于无效字符旁边,它将替换并从输入中删除一些有效字符。
例如,我们需要过滤掉所有特殊字符,然后输入文字: olala [
EditText字段会将整个InputFilter
句子传递给过滤器,返回值将为&#34;&#34;这意味着我们也会抛弃有效的 olala 。
这是我的解决方案:
olala[
我们需要双循环来避免每个带有效字符的方法调用的StringBuilder内存分配。
答案 5 :(得分:1)
科特琳
et_search.keyListener = DigitsKeyListener.getInstance(getString(R.string.alphanumeric))
String.xml
<string name="alphanumeric">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</string>
答案 6 :(得分:0)
//大兄弟,这么做就可以了。
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 (isChineseChar(source.charAt(i))) {
return "";
}
}
return null;
}
};
etName.setFilters(new InputFilter[]{filter});
//一条简单的规则。
private static boolean isChineseChar(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
return ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS;
}
答案 7 :(得分:0)
预期的解决方案是限制用户从键盘输入特殊字符。
以下解决方案使用RegX,但将其添加到strings.xml文件中,以便在创建多语言xmls时小心。
<强>的strings.xml 强>
<string name="alpha_numeric_regx">[a-zA-Z 0-9]+</string>
源文件
//Extracting forehand to avoid multiple calls to getString from Filter
String alphaNumericRegX = getString(R.string.alpha_numeric_regx);
mEditTextOtp.setFilters(new InputFilter[]{(source, start, end, dest, dStart, dEnd) -> {
for (int i = 0; i < source.length(); i++) {
if (source.equals("")) {
return source;
}
if (source.toString().matches(alphaNumericRegX)) {
return source;
}
return "";
}
return null;
}});
希望这能解决问题。对于新人。 :)
答案 8 :(得分:-1)
正在运作 限制Edittext中的特殊符号
private EditText your_editText ;
private String blockCharacters = "(~*#^|$%&!";
private InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (source != null && blockCharacters.contains(("" + source))) {
return "";
}
return null;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
your_editText = (EditText) findViewById(R.id.your_editText);
your_editText .setFilters(new InputFilter[] { filter });
}
}