Zastanawiam się, czy istnieje sposób, aby poradzić sobie z naciśnięciem klawisza Enterpodczas wpisywania EditText
czegoś podobnego do zdarzenia HTML onSubmit.
Zastanawia mnie również, czy istnieje sposób na manipulowanie wirtualną klawiaturą w taki sposób, że przycisk „Gotowe” jest oznaczony czymś innym (na przykład „Idź”) i wykonuje określoną akcję po kliknięciu (ponownie, jak onSubmit).
Odpowiedzi:
Tak.
Też tak.
Będziesz chciał przyjrzeć się atrybutom
android:imeActionId
iandroid:imeOptions
, a takżesetOnEditorActionListener()
metodzieTextView
.Aby zmienić tekst przycisku „Gotowe” na niestandardowy ciąg, użyj:
źródło
źródło
enter
tekstu edycji cały tekst edycji przesuwa się w dół ... Jak mogę to naprawić?Oto co robisz. Jest również ukryty w przykładowym kodzie programisty Androida „Czat Bluetooth”. Wymień pogrubione części z napisem „przykład” własnymi zmiennymi i metodami.
Najpierw zaimportuj to, czego potrzebujesz, do głównego działania, w którym chcesz, aby przycisk powrotu zrobił coś specjalnego:
Teraz utwórz zmienną typu TextView.OnEditorActionListener dla swojego klucza powrotu (tutaj używam exampleListener );
Następnie musisz powiedzieć słuchaczowi dwie rzeczy o tym, co zrobić po naciśnięciu przycisku powrotu. Musi wiedzieć, o czym jest EditText (tutaj używam exampleView ), a następnie musi wiedzieć, co zrobić, gdy zostanie naciśnięty klawisz Enter (tutaj, example_confirm () ). Jeśli jest to ostatni lub jedyny tekst EditText w Twojej aktywności, powinien on zrobić to samo, co metoda onClick dla przycisku Prześlij (lub OK, Potwierdź, Wyślij, Zapisz itp.).
Na koniec ustaw detektor (najprawdopodobniej w metodzie onCreate);
źródło
KeyEvent.ACTION_UP
. Aby to zadziałało, trzeba najpierw zużywająACTION_DOWN
wydarzenie:if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_DOWN) { return true; }
. Następnie możesz sprawdzićACTION_UP
zdarzenie i wykonać akcję (podobną do powyższej odpowiedzi). Jeśli nie wykorzystaszACTION_DOWN
zdarzenia,onEditorAction
nie zostaniesz wezwanyACTION_UP
.if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {...}
- nie mogłem znaleźć żadnego z innych podejść do pracyKlawiatury sprzętowe zawsze dają zdarzenia enter, ale klawiatury programowe zwracają różne ID akcji i wartości zerowe w tekstach edycji SingleLine. Ten kod reaguje za każdym razem, gdy użytkownik naciśnie klawisz Enter w tekście EditText, dla którego ustawiony został ten detektor, niezależnie od tego, czy jest on edytowany, czy typ klawiatury.
Domyślny wygląd klawisza Enter w singleLine = false daje wygiętą strzałkę na klawiaturze. Kiedy singleLine = true w ostatnim EditText, klucz mówi GOTOWE, a na EditTexts przed nim NEXT. Domyślnie takie zachowanie jest spójne we wszystkich emulatorach waniliowych, androidowych i google. Atrybut scrollHorizontal nie robi żadnej różnicy. Test zerowy jest ważny, ponieważ odpowiedź telefonów na miękkie wejścia jest pozostawiona producentowi, a nawet w emulatorach, emulatory waniliowe poziomu 16 reagują na długie miękkie wejścia w wieloliniowych i przewijanych poziomych tekstach edycyjnych z działaniem Id NEXT i zerowe dla wydarzenie.
źródło
Ta strona opisuje dokładnie, jak to zrobić.
https://developer.android.com/training/keyboard-input/style.html
Ustaw Androida: imeOptions, a następnie po prostu sprawdź actionId w onEditorAction. Więc jeśli ustawisz imeOptions na „actionDone”, wtedy sprawdziłbyś „actionId == EditorInfo.IME_ACTION_DONE” w onEditorAction. Upewnij się również, czy ustawiłeś android: inputType.
Oto EditText z powyższego przykładu:
Możesz to również ustawić programowo za pomocą funkcji setImeOptions (int) . Oto OnEditorActionListener z powyższego przykładu:
źródło
Wiem, że to roczek, ale właśnie odkryłem, że działa idealnie dla EditText.
Zapobiega tylko tekstowi i spacji. Nie mogłem tabulować, „return” („\ n”) ani nic takiego.
źródło
Podobnie jak dodatek do odpowiedzi Chada (który działał prawie idealnie dla mnie), stwierdziłem, że muszę dodać kontrolę typu akcji KeyEvent, aby zapobiec dwukrotnemu wykonywaniu kodu (raz na klawiaturze i raz na klawiaturze) zdarzenie).
Widzieć http://developer.android.com/reference/android/view/KeyEvent.html, aby uzyskać informacje na temat powtarzania zdarzeń akcji (przytrzymanie klawisza Enter) itp.
źródło
Miałem podobny cel. Chciałem rozwiązać, naciskając klawisz „Enter” na klawiaturze (który chciałem dostosować) w AutoCompleteTextView, który rozszerza TextView. Próbowałem różnych rozwiązań z góry i wydawało się, że działają. ALE napotkałem pewne problemy, kiedy zmieniłem typ wejścia na moim urządzeniu (Nexus 4 z AOKP ROM) z SwiftKey 3 (gdzie działało idealnie) na standardową klawiaturę Android (gdzie zamiast obsługiwać mój kod od słuchacza, nowa linia była wszedł po naciśnięciu klawisza „Enter”. Zajęło mi trochę czasu, aby poradzić sobie z tym problemem, ale nie wiem, czy zadziała we wszystkich okolicznościach, bez względu na to, jakiego typu wejścia użyjesz.
Oto moje rozwiązanie:
Ustaw atrybut typu wejściowego TextView w pliku XML na „tekst”:
Dostosuj etykietę klawisza „Enter” na klawiaturze:
Ustaw OnEditorActionListener na TextView:
Mam nadzieję, że pomoże to innym uniknąć problemów, które miałem, ponieważ prawie doprowadziły mnie do szału.
źródło
W swoim pliku xml dodaj atrybut imeOptions do editText
Następnie w kodzie Java dodaj OnEditorActionListener do tego samego EditText
Oto wyjaśnienie - ImeOptions = actionDone przypisze „actionDone” do EnterKey. Klawisz Enter na klawiaturze zmieni się z „Enter” na „Gotowe”. Tak więc, kiedy zostanie naciśnięty klawisz Enter, uruchomi to działanie i tym samym sobie z nim poradzisz.
źródło
Możesz to również zrobić ..
źródło
enter
tekstu edycji cały tekst edycji przesuwa się w dół ... Jak mogę to naprawić?Działa dla mnie bardzo dobrze
Ponadto ukryj klawiaturę
źródło
Najpierw musisz ustawić opcję EditText nasłuchiwać naciśnięcia klawisza
Po drugie, zdefiniuj zdarzenie po naciśnięciu klawisza, na przykład zdarzenie, aby ustawić tekst TextView:
I na koniec, nie zapomnij zaimportować EditText, TextView, OnKeyListener, KeyEvent u góry:
źródło
działa idealnie
}
działa idealnie
źródło
Xml
źródło
To powinno działać
źródło
Wpisz ten kod w edytorze, aby mógł zaimportować niezbędne moduły.
źródło
Działa to dobrze na telefonach z Androidem LG. Zapobiega
ENTER
interpretowaniu innych znaków specjalnych jako znaków normalnych.Next
lubDone
przycisk pojawia się automatycznie iENTER
działa zgodnie z oczekiwaniami.źródło
Oto prosta funkcja statyczna, którą możesz wrzucić do swojej
Utils
lubKeyboards
klasy, która wykona kod, gdy użytkownik naciśnie klawisz powrotu na klawiaturze sprzętowej lub programowej. To zmodyfikowana wersja doskonałej odpowiedzi @ Earcasperźródło
InputType w polu tekstowym musi być
text
, aby zadziałało to, co powiedział Commons Commons. Po prostu wypróbowałem to wszystko, bez inputType przed próbą i nic nie działało, Enter nadal rejestrował się jako soft enter. PoteminputType = text
wszystko, łącznie z setImeLabel, działało.Przykład:
android:inputType="text"
źródło
źródło
Niezawodnym sposobem odpowiedzi na <enter> w EditText jest TextWatcher , LocalBroadcastManager i BroadcastReceiver . Musisz dodać bibliotekę wsparcia v4, aby korzystać z LocalBroadcastManager. Korzystam z samouczka na stronie vogella.com : 7.3 „Lokalne transmisje z LocalBroadcastManager” z powodu pełnego zwięzłego kodu Przykład. W onTextChanged before jest indeks końca zmiany przed zmianą >; minus start. Gdy w TextWatcher wątek interfejsu użytkownika jest zajęty aktualizowaniem edytowalnego editText, więc wysyłamy zamiar wznowienia BroadcastReceiver, gdy wątek interfejsu użytkownika zakończy aktualizację editText.
źródło
android:inputType="textCapSentences"
), Znaki powrotu karetki są odfiltrowywane z wejścia, więc funkcja onTextChanged () nie jest wywoływana, gdy użytkownik naciśnie klawisz Enter.Na to pytanie nie ma jeszcze odpowiedzi w przypadku Butterknife
LAYOUT XML
APP JAVA
źródło
Korzystając z Kotlin, stworzyłem funkcję, która obsługuje wszystkie rodzaje „wykonanych” działań dla EditText, w tym klawiaturę, i można go modyfikować, a także obsługiwać inne klawisze, jak chcesz:
Przykładowe użycie:
Jeśli chodzi o zmianę etykiety, myślę, że zależy to od aplikacji na klawiaturze i zwykle zmienia się tylko w układzie poziomym, jak tutaj napisano . W każdym razie przykładowe użycie tego:
Lub, jeśli chcesz w XML:
A wynik (pokazany w układzie poziomym):
źródło
Dodaj te depencendy i powinno działać:
źródło
Umożliwi to wywołanie funkcji, gdy użytkownik naciśnie klawisz powrotu.
Stosowanie
źródło