【问题标题】:Asus Zenfone (Android) TextView\TextWatcher keyboard input bugAsus Zenfone (Android) TextView\TextWatcher 键盘输入错误
【发布时间】:2015-07-29 12:00:17
【问题描述】:

更新:实际上,这不是华硕手机的问题,而是华硕 ZenUI 键盘的问题。您可以安装一个您喜欢的键盘来解决问题。我已经安装了 Google 键盘测试了 Zenfone 2。我的TextWatcher 中的所有内容都可以正常工作。但这不是错误修复或问题解决方案。

我有两个InputFilters 和一个TextWatcher 附加到我的EditText

InputFilters:标准InputFilter.AllCaps() 过滤器和自定义“仅限字母字符”。它们就像魔法一样发挥作用。

TextWatcher 进行一些文本转换(将符号从俄语音译成英语)。 TextWatcher 也可以正常工作,但不适用于华硕手机(在 Zenfone 4 和 5 上测试)。 Nexus 5、Genymotion 模拟器和三星设备都可以。

问题是华硕手机不允许输入多个符号。可能TextWatchersetSelection() 有问题(当TextWatcher 被禁用时,华硕一切正常)。

TextView的列表:

etCardholder.setFilters(new InputFilter[]{new InputFilter.AllCaps(), new NameInputeFilter(false)});

twTransliterator = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        etCardholder.removeTextChangedListener(twTransliterator);
        etCardholder.setText(StringTools.transliterateCharacterRuToEn(s.toString()));
        etCardholder.addTextChangedListener(twTransliterator);
    }

    @Override
    public void afterTextChanged(Editable s) {
        etCardholder.setSelection(etCardholder.getText().length());
        validateCardData();
    }
};

etCardholder.addTextChangedListener(twTransliterator);

我尝试不使用setSelection() 设置光标的位置,而是使用append()。这里的结果相同。

你有什么想法吗?以及如何走动?

【问题讨论】:

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


    【解决方案1】:

    我找到了解决这个问题的方法,在我的例子中,EditText 上的 inputType 属性带有参数:textCapCharacters,我使用 textNoSuggestions 解决。您也可以将两者与管道运算符“|”一起使用。

     android:inputType="textCapCharacters|textNoSuggestions"
    

    【讨论】:

      【解决方案2】:

      为未来的谷歌员工!

      问题来自华硕 ZenUI 的键盘,如问题中所述。 @Gabriel Correra 建议的解决方法完全解决了这个问题, 但是您可能不想为所有用户设置此标志,因为并非每个人都在使用这个有问题的键盘。

      通过这个 sn-p,您可以了解用户的默认键盘是否为 Asus ZenUI's keyboard,如果是,则以编程方式添加提到的标志,让其他用户享受他们的建议!

      String def = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
      if(def.equals("com.asus.ime/.IME")) {
         setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-23
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        相关资源
        最近更新 更多