filter方法在更改键盘语言时调用两次android edittext

时间:2015-10-17 22:21:16

标签: android android-edittext android-input-filter

我喜欢将西里尔字母转换成拉丁字母。例如,当用户输入西里尔字母时,我喜欢将字母转换为拉丁文。这是代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    test = (EditText) findViewById(R.id.test);
    InputFilter filter = new InputFilter() {
        TransliterationHelper tr = new TransliterationHelper();

        public CharSequence filter(CharSequence source, int start, int end,
                                   Spanned dest, int dstart, int dend) {

            if (tr.isAlphaCyrilic(source.toString())) {
                String convertedString = tr.returnLatinForCyrilic(source.toString());
                return convertedString.toUpperCase();
            } else if (tr.isAlpha(source.toString()))
                return source.toString().toUpperCase();
            else
                return "";


            return null;
        }
    };

    test.setFilters(new InputFilter[]{filter});
}

这是isAlphaCyrilic功能:

  public static boolean isAlphaCyrilic(String s) {
    boolean isCyrilic = false;
    for (char c : s.toCharArray()) {
        if (Character.UnicodeBlock.of(c) == Character.UnicodeBlock.CYRILLIC) {
            isCyrilic = true;
            break;
        }
    }

    return isCyrilic;
}

这是isAlpha的代码

public static boolean isAlpha(String s) {
    String pattern = "^[a-zA-Z ]*$";
    if (s.matches(pattern)) {
        return true;
    }
    return false;
}

函数returnLatinForCyrilic,返回西里尔字母的匹配字符:

public String returnLatinForCyrilic(String s) {
    String strTranslated = cyrilicToLatinMap.get(s);
    return strTranslated;
}

例如我只输入拉丁字母或西里尔字母一切正常,但是当我在拉丁语(我改变键盘语言)之后输入西里尔字母时,方法过滤器再次调用,我不喜欢这样。

有人有想法吗?

1 个答案:

答案 0 :(得分:2)

我把android:inputType="textNoSuggestions" 所以方法过滤器没有被调用两次。