11

私はAndroidに取り組んでいます。以前onKeyListenerは、キー イベントで特定のアクションを処理していました。

ただし、この方法では問題が解決しないようです。これは、そのリスナーを に実装するとほとんどすべてのキーが無効になるためEditTextです。SO でいくつかのトピックを読んだ後、代わりに TextWatcher を使用する必要があることはわかっていますが、ENTER提供されるパラメーターは 、 などのみCharSequenceであるため、内部でキーイベントを処理する方法をまだ疑問に思っています。パラメーターEditableが見つかりませんでしkeyCodeた。

4

3 に答える 3

18

これを試して

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    if (s.length()>0 && s.subSequence(s.length()-1, s.length()).toString().equalsIgnoreCase("\n")) {
        //enter pressed
    }
}
于 2013-05-04T04:28:39.930 に答える
7

これを試して

protected View.OnKeyListener onEnter = new View.OnKeyListener() {

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if ((event.getAction() == KeyEvent.ACTION_DOWN)
                && (keyCode == KeyEvent.KEYCODE_ENTER)) {
            //here do what you want
        }
        return false; // very important
    }
};
于 2012-10-14T10:42:11.643 に答える
1

行末だけでなく、EditTextフィールドの任意の場所で「Enter」を押すことができるため、これがより良い解決策だと思います。

    edittext.addTextChangedListener(new TextWatcher() {
        public void afterTextChanged(Editable s) {
        }

        public void beforeTextChanged(CharSequence s, int st, int ct,
                                      int af) {
        }

        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s.length() < 1 || start >= s.length() || start < 0)
                return;

            // If it was Enter
            if (s.subSequence(start, start + 1).toString().equalsIgnoreCase("\n")) {

                // Change text to show without '\n'
                String s_text = start > 0 ? s.subSequence(0, start).toString() : "";
                s_text += start < s.length() ? s.subSequence(start + 1, s.length()).toString() : "";
                edittext.setText(s_text);

                // Move cursor to the end of the line
                edittext.setSelection(s_text.length());
            }
        }
    });
于 2016-12-15T08:53:57.250 に答える