Как переопределить поведение клавиши <ENTER>виртуальной клавиатуры в Android - PullRequest
7 голосов
/ 17 июля 2010

Я хочу переопределить поведение клавиши ENTER на виртуальной клавиатуре, чтобы:

  • , когда на экране появилось больше полей, он «вкладывался» вследующее поле
  • , когда оно является последним полем экрана, оно выполняет действие экрана по умолчанию

Я играл с опциями и надписями IME, но простоне понимаю, что я хочу.У кого-нибудь есть предложения?

1 Ответ

9 голосов
/ 28 июля 2010

С помощью другого форума я нашел способ сделать это.

Чтобы сделать его многоразовым, я создал свой собственный супер-диалоговый класс, который содержит 2 OnKeyListener объекта и абстрактный метод отправки:

public abstract class MyAbstractDialog extends Dialog {

/**
 * OnKeyListener that puts the focus down when the ENTER key is pressed
 */
protected View.OnKeyListener onEnterFocusDown = new View.OnKeyListener() {

                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                            (keyCode == KeyEvent.KEYCODE_ENTER)) {
                                v.requestFocus(View.FOCUS_DOWN);
                        return true;
                }
                        return false;
                }
        };

/**
 * OnKeyListener that submits the page when the ENTER key is pressed
 */
protected View.OnKeyListener onEnterSubmitView = new View.OnKeyListener() {

                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                            (keyCode == KeyEvent.KEYCODE_ENTER)) {
                                submitView(v);
                        return true;
                }
                        return false;
                }
        };
        protected abstract void submitView(View v);

}

Теперь в Dialog я могу использовать эти объекты для установки на своих полях:

// make the ENTER key on passwordField1 put the focus on the next field
passwordField1.setOnKeyListener(onEnterFocusDown);

// make the ENTER key on passwordField2 submit the page
passwordField2.setOnKeyListener(onEnterSubmitView);
...