编辑仅包含 ascii 字母的文本.如何?



我的应用程序的主要用户安装了 2 种语言。英语和其他。默认系统语言不是英语。 用户只需使用软件键盘上的语言切换按钮。

我的应用程序中的一个特定的 EditText 字段只需要接受 A-Z(大写问题不是问题(和空格,而不能接受其他字符(没有数字,没有非拉丁字符等(。

我了解了InputFilters的解决方案,例如如何创建EditText仅在Android中接受字母表? 或使用TextWatcher派生的,但您只允许应用程序简单地忽略不正确的文本,我需要能够让用户甚至无法在屏幕上首先看到非拉丁1字母(我知道可以使用硬件键盘, 这目前不是问题(。

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
也无济于事(语言更改按钮在键盘中仍然可见(。

我需要像iPhone这样的东西:以编程方式更改键盘语言,但适用于Android。

除了向我的应用程序添加假键盘之外,我还有其他选择吗?

iOS有.keyboardType = .asciiCapable,它在这种情况下工作

您可以使用输入过滤器并将其分配给编辑文本

请参考下面的示例

public class AlphabetInputFilter implements InputFilter {
Pattern mPattern;
public AlphabetInputFilter() {
mPattern = Pattern.compile("[a-z]");
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String formatedSource = dest.subSequence(0, dstart).toString();
String destPrefix = source.subSequence(start, end).toString();
String destSuffix = dest.subSequence(dend, dest.length()).toString();
CharSequence match = TextUtils.concat(formatedSource, destPrefix, destSuffix);
Matcher matcher = mPattern.matcher(match);
if (!matcher.matches())
return "";
return null;
}

}

您可以为其分配编辑文本

mEdittext.setFilters(new InputFilter[]{
new AlphabetInputFilter()});

用户将无法输入除 A 到 Z 以外的任何值

我找到了至少基于 https://stackoverflow.com/a/49710730/1063214 的半工作解决方案

imeOptions="flagForceAscii"  

在编辑文本上。

现在至少不显示非英语键盘(无论如何都会过滤数字等(。

最新更新