只有 ascii 字母的 EditText。如何?

EditText with only ascii letters. How?

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

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

我了解使用 How to create EditText accepts Alphabets only in android? 之类的 InputFilters 或使用 TextWatcher 派生的解决方案,但你只允许应用程序简单地忽略不正确的文本,我需要能够让用户甚至无法看到非 latin1 字母在他们的屏幕键盘上排在第一位(我知道可以使用硬件键盘,目前这不是问题)。

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

我需要类似 iPhone: Change Keyboard language programmatically 的内容,但 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 以外的任何值

我至少找到了基于

的半可行解决方案
imeOptions="flagForceAscii"  

在 EditText 上。

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