gpt4 book ai didi

android - EditText 上的 InputFilter 导致重复文本

转载 作者:可可西里 更新时间:2023-11-01 18:46:05 25 4
gpt4 key购买 nike

我正在尝试实现一个 EditText,它将输入限制为仅包含数字的大写字符 [A-Z0-9]。

我从一些帖子的 InputFilter 方法开始。但在这里我在 Samsung Galaxy Tab 2 上遇到了一个问题,但在模拟器或 Nexus 4 上没有。

问题是这样的:

  1. 当我输入“A”时,文本显示为“A”很好
  2. 现在,当我输入“B”时,文本应该是“AB”,但它却给了我“AAB”这看起来很奇怪。

简而言之就是重复字符

这是我正在处理的代码:

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 "";
}
}

XML 文件代码:

<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>

我完全被困在这个问题上,所以这里的任何帮助将不胜感激。

最佳答案

字符重复的问题来自 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);
}

关于android - EditText 上的 InputFilter 导致重复文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18529034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com