仅限Android字母数字,编程方式(非XML)
我有一个Android程序,有一个名为aCTVNumeroPoste的AutoCompleteTextView 此AutoCompleteTextView更改输入类型取决于其他选项 因此,选项1使AutoCompleteTextView只显示文本,选项2使AutoCompleteTextView只显示数字。这似乎与键盘配合得很好 但问题是,当AutoCompleteTextView是文本时,我只需要字母数字,键盘允许我引入$%&/()=?!-。等 代码如下:仅限Android字母数字,编程方式(非XML),android,autocompletetextview,alphanumeric,programmatically,android-inputtype,Android,Autocompletetextview,Alphanumeric,Programmatically,Android Inputtype,我有一个Android程序,有一个名为aCTVNumeroPoste的AutoCompleteTextView 此AutoCompleteTextView更改输入类型取决于其他选项 因此,选项1使AutoCompleteTextView只显示文本,选项2使AutoCompleteTextView只显示数字。这似乎与键盘配合得很好 但问题是,当AutoCompleteTextView是文本时,我只需要字母数字,键盘允许我引入$%&/()=?!-。等 代码如下: if (accion.equals(
if (accion.equals("MANTENIMIENTO")) {
aCTVNumeroPoste.setInputType(InputType.TYPE_CLASS_TEXT);
int maxLengthofEditText = 19;
aCTVNumeroPoste.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLengthofEditText)});
}
else {
aCTVNumeroPoste.setInputType(InputType.TYPE_CLASS_NUMBER);
aCTVNumeroPoste.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
int maxLengthofEditText = 3;
aCTVNumeroPoste.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLengthofEditText)});
}
我希望以编程方式解决这个问题,而不是用XML(使用android:digits=…)
我尝试在输入类型后使用此代码。键入\u CLASS\u TEXT:
aCTVNumeroPoste.setFilters(new InputFilter[]{
new InputFilter() {
public CharSequence filter(CharSequence src, int start,
int end, Spanned dst, int dstart, int dend) {
if (src.equals("")) {
return src;
}
if (src.toString().matches("[a-zA-Z 0-9]+")) {
return src;
}
return "";
}
}
});
// Apply the filters to control the input (alphanumeric)
ArrayList<InputFilter> curInputFilters = new ArrayList<InputFilter>(Arrays.asList(aCTVNumeroPoste.getFilters()));
curInputFilters.add(0, new AlphaNumericInputFilter());
curInputFilters.add(1, new InputFilter.LengthFilter(maxLengthofEditText));
InputFilter[] newInputFilters = curInputFilters.toArray(new InputFilter[curInputFilters.size()]);
aCTVNumeroPoste.setFilters(newInputFilters);
还有这个:
aCTVNumeroPoste.setKeyListener(DigitsKeyListener.getInstance("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "));
但是什么都没用。任何帮助都是值得的。我回答我自己的问题 从这篇文章 此代码适用于我:
public static class AlphaNumericInputFilter implements InputFilter {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
// Only keep characters that are alphanumeric
StringBuilder builder = new StringBuilder();
for (int i = start; i < end; i++) {
char c = source.charAt(i);
if (Character.isLetterOrDigit(c)) {
builder.append(c);
}
}
// If all characters are valid, return null, otherwise only return the filtered characters
boolean allCharactersValid = (builder.length() == end - start);
return allCharactersValid ? null : builder.toString();
}
}
公共静态类AlphaNumericiInputFilter实现InputFilter{
公共CharSequence筛选器(CharSequence源、int开始、int结束、,
跨越目的地、内部数据起点、内部数据起点){
//仅保留字母数字字符
StringBuilder=新的StringBuilder();
for(int i=start;i
然后将其添加到InputType之后。键入\u CLASS\u TEXT:
aCTVNumeroPoste.setFilters(new InputFilter[]{
new InputFilter() {
public CharSequence filter(CharSequence src, int start,
int end, Spanned dst, int dstart, int dend) {
if (src.equals("")) {
return src;
}
if (src.toString().matches("[a-zA-Z 0-9]+")) {
return src;
}
return "";
}
}
});
// Apply the filters to control the input (alphanumeric)
ArrayList<InputFilter> curInputFilters = new ArrayList<InputFilter>(Arrays.asList(aCTVNumeroPoste.getFilters()));
curInputFilters.add(0, new AlphaNumericInputFilter());
curInputFilters.add(1, new InputFilter.LengthFilter(maxLengthofEditText));
InputFilter[] newInputFilters = curInputFilters.toArray(new InputFilter[curInputFilters.size()]);
aCTVNumeroPoste.setFilters(newInputFilters);
//应用过滤器控制输入(字母数字)
ArrayList curInputFilters=新的ArrayList(Arrays.asList(aCTVNumeroPoste.getFilters());
添加(0,新的AlphaNumericInputFilter());
添加(1,新的InputFilter.LengthFilter(MaxLengthToFeditText));
InputFilter[]newInputFilters=curInputFilters.toArray(新的InputFilter[curInputFilters.size());
aCTVNumeroPoste.setFilters(新输入过滤器);