当editText为full或empty时,在某些机器人中不会触发keySend / onKey

时间:2017-06-19 11:41:14

标签: android

EditText maxLength=1inputType=number|textNoSuggestions textNoSuggestions没有弹出可能触发textWatcher的文字。当没有文本时我需要检测退格,当editText已满时我需要检测onkey(已经有1个字符)

的EditText

public class ZanyEditText extends EditText {
    private void init() {
        this.setOnKeyListener(new View.OnKeyListener() {
            @Override // hardware keyboard
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                System.out.println("onKey");
                return false;
            }
        });
        this.addTextChangedListener(new TextWatcher() {
            public void afterTextChanged(Editable s) { }

            public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

            public void onTextChanged(CharSequence s, int start, int before, int count) {
                System.out.println("onTextChanged");
            }
        });
    }

    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        return new ZanyInputConnection(super.onCreateInputConnection(outAttrs),
                true);
    }

    private class ZanyInputConnection extends InputConnectionWrapper {

        ZanyInputConnection(InputConnection target, boolean mutable) {
            super(target, mutable);
        }

        @Override // soft keyboard
        public boolean sendKeyEvent(KeyEvent event) {
            System.out.println("sendKeyEvent");
            return super.sendKeyEvent(event);
        }
    }
}

styles.xml

<style name="SpaceLetterCode">
        <item name="android:maxLength">1</item>
        <item name="android:singleLine">true</item>
        <item name="android:hint"> </item>
        <item name="android:imeOptions">actionNext</item>
        <item name="android:inputType">number|textNoSuggestions</item>
</style>

layout.xml

<android.maps.api.test.com.myapplication.ZanyEditText
    android:layout_height="50dp"
    style="@style/SpaceLetterCode"
    android:layout_width="match_parent"/>

以下是一些随机手机(全部来自软件键盘)的测试结果:

  • no =没有触发任何内容
  • no之外的任何内容=触发事件的名称。

示例:当EditText已有1个字符时。我从软件键盘发送输入,我只被sendKeyEvent解雇,sendKeyEvent列中的交叉点为Char when full

enter image description here

我可以做些什么来检测所有设备中的这些事件吗?

更新1 : 我对人们如何解决这个问题进行了一些研究。 Lyft应用程序最终会使用自定义键盘(我的意思是屏幕上有11个按钮)。我想原生键盘没有解决方案。

0 个答案:

没有答案