Mam miejsce, w EditText
którym ustawiam następującą właściwość, dzięki czemu mogę wyświetlić przycisk Gotowe na klawiaturze, gdy użytkownik kliknie EditText.
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
Kiedy użytkownik kliknie przycisk Gotowe na klawiaturze ekranowej (kończy pisanie), chcę zmienić RadioButton
stan.
Jak mogę śledzić zrobiony przycisk po naciśnięciu go z klawiatury ekranowej?
android
android-edittext
ime
d-man
źródło
źródło
Odpowiedzi:
Skończyło się na kombinacji odpowiedzi Robertsa i chiraga:
Aktualizacja: powyższy kod czasami aktywuje oddzwanianie dwukrotnie. Zamiast tego wybrałem następujący kod, który otrzymałem od klientów czatu Google:
źródło
isPreparedForSending()
i dlaczego powraca druga metodatrue
?Wypróbuj to, powinno działać dla tego, czego potrzebujesz:
źródło
<EditText android:imeOptions="actionDone" android:inputType="text"/>
Kod Java to:
źródło
Wiem, że to pytanie jest stare, ale chcę wskazać, co dla mnie zadziałało.
Próbowałem użyć przykładowego kodu ze strony Android Developers (pokazanej poniżej), ale to nie działało. Sprawdziłem więc klasę EditorInfo i zdałem sobie sprawę, że wartość całkowitą IME_ACTION_SEND podano jako
0x00000004
.Przykładowy kod od programistów Androida:
Więc dodałem wartość całkowitą do mojego
res/values/integers.xml
pliku.Następnie zmodyfikowałem plik układu
res/layouts/activity_home.xml
w następujący sposóbA potem zadziałał przykładowy kod.
źródło
Więcej informacji na temat ustawiania OnKeyListener i słuchanie przycisku Gotowe.
Najpierw dodaj OnKeyListener do sekcji implementacji swojej klasy. Następnie dodaj funkcję zdefiniowaną w interfejsie OnKeyListener:
Biorąc pod uwagę obiekt EditText:
źródło
Podczas gdy większość ludzi odpowiedziała bezpośrednio na to pytanie, chciałem bardziej szczegółowo rozwinąć koncepcję tego pytania. Po pierwsze, zwróciłem uwagę IME, kiedy utworzyłem domyślną aktywność logowania. Wygenerował dla mnie trochę kodu, który obejmował:
Powinieneś już być zaznajomiony z atrybutem inputType. To tylko informuje Androida o oczekiwanym typie tekstu, takim jak adres e-mail, hasło lub numer telefonu. Pełna lista możliwych wartości znajduje się tutaj .
Był to jednak atrybut
imeOptions="actionUnspecified"
, że nie rozumiałem jego celu. Android pozwala na interakcję z klawiaturą, która wyskakuje z dołu ekranu, gdy tekst jest zaznaczany za pomocąInputMethodManager
. W dolnym rogu klawiatury znajduje się przycisk, zwykle z napisem „Dalej” lub „Gotowe”, w zależności od bieżącego pola tekstowego. Android pozwala to dostosować za pomocąandroid:imeOptions
. Możesz określić przycisk „Wyślij” lub „Dalej”. Pełna lista znajduje się tutaj .Dzięki temu możesz nasłuchiwać nacisków na przycisku akcji, definiując element
TextView.OnEditorActionListener
dlaEditText
elementu. Jak w twoim przykładzie:Teraz w moim przykładzie miałem
android:imeOptions="actionUnspecified"
atrybut. Jest to przydatne, gdy chcesz spróbować zalogować się do użytkownika po naciśnięciu klawisza Enter. W swojej aktywności możesz wykryć ten tag, a następnie spróbować zalogować się:źródło
Dzięki chikka.anddev i Alexowi Cohnowi w Kotlinie jest to:
Tutaj sprawdzam
Enter
klucz, ponieważ zwracaEditorInfo.IME_NULL
zamiastIME_ACTION_DONE
.Zobacz także Android imeOptions = „actionDone” nie działa . Dodaj
android:singleLine="true"
wEditText
.źródło
Rozwiązanie Kotlin
Podstawowym sposobem obsługi tego w Kotlin jest:
Rozszerzenie Kotlin
Użyj tego, aby po prostu wywołać
edittext.onDone{/*action*/}
swój główny kod. Sprawia, że Twój kod jest znacznie bardziej czytelny i łatwy w konserwacjiNie zapomnij dodać tych opcji do tekstu edycji
źródło
setOnEditorActionListener
. Może to tylko kwestia lokalnych ustawień konfiguracyjnych, ale mój linter naprawdę, naprawdę chce mnie dodaćelse
gałąź też, aby zaakceptować „true” w instrukcji return słuchacza (w przeciwieństwie doif
-blok).Jeśli korzystasz z Android Adnotacje https://github.com/androidannotations/androidannotations
Możesz użyć adnotacji @EditorAction
źródło