Android - Захватите Done и введите ключевые события на программной клавиатуре

В моем приложении есть страница Войти, на которой есть перечисленные элементы:

  • имя пользователя (EditText)
  • пароль (EditText)
  • Войти (кнопка)

При нажатии Login он попадет на главный экран. Намерение состоит в том, чтобы выполнить то же самое действие, когда пользователь нажимает Done после завершения ввода пароля на программной клавиатуре на Samsung Galaxy S3; и клавишу Enter программной клавиатуры на HTC One X.

Итак, вот как выглядит поле EditText of Password:

<EditText
    android:id="@+id/password_txt"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textPassword"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="8dp"
    android:singleLine="true" />

В Activity все, что я пробовал, находится здесь:

EditText mPassword = (EditText) findViewById(R.id.password_txt);
mPassword.setOnEditorActionListener(new TextView.OnEditorActionListener() {

                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER || actionId == EditorInfo.IME_ACTION_DONE){
                        Log.e("MyApp", " ------> IN EDITOR ACTION DONE");
                    }
                    return false;
                }
            });

Я пытался сохранить imeOptions для поля пароля как actionDone вместе с flagNoExtractUi, но это не сработало.


person Lavanya    schedule 31.05.2013    source источник


Ответы (2)


Я нашел решение для этого в ответе Аши, который кажется работать нормально для Samsung Galaxy S3, S3 Mini, S2, Google Nexus Tab и, надеюсь, для всех устройств Samsung. Для HTC это работало на HTC Desire X, пока я проверял. Для HTC One X это не работает. Это actionid, для которого значение равно 5, которое фиксирует действие клавиши enter программной клавиатуры.

person Lavanya    schedule 10.06.2013

HTC почему-то не поддерживает imeOptions, вообще не все клавиатуры его поддерживают. Подробнее см. здесь. Я рекомендую сделать свои собственные кнопки пользовательского интерфейса для следующего/готового/и т. д. функциональность.

person Warpzit    schedule 31.05.2013