我正在尝试实现一个编辑文本,该文本
仅将输入限制为大写字符[A-Z0-9]和数字。
我从某篇文章开始使用InputFilter方法。但我在三星Galaxy Tab 2上遇到了一个问题,但在模拟器或Nexus 4上没有。
问题是这样的:
简而言之,它重复字符
以下是我正在使用此代码的代码:
public class DemoFilter implements InputFilter {
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart,
int dend) {
if (source.equals("")) { // for backspace
return source;
}
if (source.toString().matches("[a-zA-Z0-9 ]*")) // put your constraints
// here
{
return source.toString().toUpperCase();
}
return "";
}
}
文件代码:
<EditText
android:id="@+id/et_licence_plate_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:hint="0"
android:imeOptions="actionNext"
android:inputType="textNoSuggestions"
android:maxLength="3"
android:singleLine="true"
android:textSize="18px" >
</EditText>
我完全被困在这个问题上了,所以这里的任何帮助都将不胜感激。
我在Android的输入过滤器中发现了许多错误,我不确定这些是错误还是有意为之。但肯定不符合我的要求。所以我选择使用TextWatcher而不是InputFilter
private String newStr = "";
myEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// Do nothing
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String str = s.toString();
if (str.isEmpty()) {
myEditText.append(newStr);
newStr = "";
} else if (!str.equals(newStr)) {
// Replace the regex as per requirement
newStr = str.replaceAll("[^A-Z0-9]", "");
myEditText.setText("");
}
}
@Override
public void afterTextChanged(Editable s) {
// Do nothing
}
});
上面的代码不允许用户在编辑文本中输入任何特殊符号。只允许大写字母数字字符。
我也遇到了同样的问题,在用这里发布的解决方案解决了这个问题之后,自动完成键盘仍然存在一个问题。一种解决方案是将inputType设置为“visiblePassword ”,但这减少了功能,不是吗?
当在< code>filter()方法中返回非空结果时,我可以通过调用
TextUtils.copySpansFrom((Spanned) source, start, newString.length(), null, newString, 0);
这会将自动完成的范围复制到新的结果中,并修复选择自动完成建议时出现的奇怪的重复行为。
字符重复的问题来自InputFilter糟糕的实现。如果替换不应该改变,则返回null:
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
boolean keepOriginal = true;
StringBuilder sb = new StringBuilder(end - start);
for (int i = start; i < end; i++) {
char c = source.charAt(i);
if (isCharAllowed(c)) // put your condition here
sb.append(c);
else
keepOriginal = false;
}
if (keepOriginal)
return null;
else {
if (source instanceof Spanned) {
SpannableString sp = new SpannableString(sb);
TextUtils.copySpansFrom((Spanned) source, start, end, null, sp, 0);
return sp;
} else {
return sb;
}
}
}
private boolean isCharAllowed(char c) {
return Character.isUpperCase(c) || Character.isDigit(c);
}
在某些设备中,当我尝试从edittext中选择文本以复制它时,会导致 算术异常 此方法中的异常原因 Android.Widget.Editor.UpdateShowAsAction(Editor.java:6034) 这里是我的edittext的xml代码
本文向大家介绍InputFilter实现EditText文本输入过滤器实例代码解析,包括了InputFilter实现EditText文本输入过滤器实例代码解析的使用技巧和注意事项,需要的朋友参考一下 EditText是Android的文本输入框控件,这地球人应该都知道的了,但是默认的EditText是无所不能输入的,有时候我们需要设计一 款软件,而且是给小孩子使用的,而且需要屏蔽以下未成年人所不
我正在尝试实现一个编辑文本,将输入限制为仅 Alpha 字符 [A-Za-z]。 我从本文中的InputFilter方法开始。当我键入“a%”时,文本消失,如果我按退格键,文本为“a”。我尝试过过滤器函数的其他变体,比如使用正则表达式只匹配[a-Za-z],有时会看到疯狂的行为,比如重复字符,我会键入“a”,然后键入“b”,再键入“aab”,然后再键入“c”,再得到“aabaabc”,然后按退格键
任何帮助都将得到承认。
我一直在像这样限制我的编辑文本的输入; 但是任何使用过这种方法的人都会知道,当它与自动更正和退格键混合使用时,会导致重复字符。为了解决这个问题,我像这样从键盘上删除了自动更正栏; 现在,这在现有的Android键盘上运行良好,但问题是在替代键盘上(来自Google play),它不禁用自动更正,因此我再次遇到重复字符的问题。有人遇到过这个问题吗/知道如何解决吗?
问题内容: 我想将字符限制为0-9,az,AZ和空格键。设置输入类型I可以限制为数字,但是我无法弄清Inputfilter在文档中查找的方式。 问题答案: 我在另一个论坛上找到了这个。像冠军一样工作。