Попытка сделать так, чтобы кнопка ввода на программной клавиатуре произнесла поиск или отобразила увеличительное стекло поиска и обработала его щелчок для редактирования - PullRequest
2 голосов
/ 29 января 2020

Я попробовал очень популярный ответ , предложенный здесь

Хотя это не сработало для меня, как, кажется, для других пользователей. Возможно это устарело или у меня есть что-то противоречащее в моем коде.

Вот xml для моего EditText:

<EditText
        android:id="@+id/editText_letter_entry"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:background="@drawable/edit_text_rounded"
        android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"
        android:drawableEnd="@drawable/ic_search_black_24dp"
        android:hint="@string/enter_letters"
        android:importantForAutofill="no"
        android:inputType="text|textNoSuggestions|textVisiblePassword"
        android:maxLength="15"
        android:maxLines="1"
        android:imeOptions="actionSearch"
        android:paddingLeft="@dimen/et_padding_left_right"
        android:paddingRight="@dimen/et_padding_left_right"
        app:layout_constraintBottom_toTopOf="@+id/bottomBannerAdView"
        app:layout_constraintEnd_toStartOf="@+id/guideline2Container"
        app:layout_constraintStart_toStartOf="@+id/guideline1Container"
        app:layout_constraintTop_toTopOf="parent" />

Как видите, у меня есть android:imeOptions="search" & android:inputType="text" вместе с textNoSuggestions & textVisiblePassword в качестве inputType. Я пробовал это только с text как inputType, как и в другом предложенном ответе, но это не имело никакого значения, и я не хочу никаких предложений по клавиатуре.

Что касается этого слушателя, я удалось заставить это работать, хотя и немного хакерским способом, потому что action id возвращается как IME_ACTION_UNSPECIFIED, поэтому я просто обработал это вместо этого. Это можно увидеть здесь:

 et_letter_entry.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_UNSPECIFIED ) {
                preformSearch();
                return true;
            }
            return false;
        }
    });

В настоящее время у меня есть значок для новой строки, а не search или значок поиска.

Почему на xml не влияет android:imeOptions="search" в моем случае?

Почему кнопка ввода отображает значок новой строки?

Почему идентификатор действия возвращается как неопределенное?

Спасибо

1 Ответ

3 голосов
/ 31 января 2020

Удалите

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"

из вашего EditText, и это решит вашу проблему.

Конфликт произошел из-за установки android:digits. В этой ситуации android:inputType по умолчанию установлено на numeric, независимо от того, что вы ввели (android:inputType="text|textNoSuggestions|textVisiblePassword") в вашем xml, что делает ваш android:imeOptions="actionSearch" неактуальным.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...