Chcę automatycznie wyświetlać klawiaturę programową, gdy EditText
jest ustawiona ostrość (jeśli urządzenie nie ma fizycznej klawiatury) i mam dwa problemy:
Kiedy moje
Activity
jest wyświetlane, mojeEditText
jest skupione, ale klawiatura nie jest wyświetlana, muszę ponownie kliknąć na nią, aby wyświetlić klawiaturę (powinna być wyświetlana, gdy mojeActivity
jest wyświetlane).A kiedy klikam przycisk Gotowe na klawiaturze, klawiatura jest dyskredytowana, ale
EditText
pozostaje skupiona i ty nie chcesz (ponieważ moja edycja jest zakończona).
Aby wznowić, moim problemem jest posiadanie czegoś bardziej podobnego do iPhone'a: które utrzymują synchronizację klawiatury z moim EditText
stanem (skoncentrowany / nieokreślony) i oczywiście nie przedstawia miękkiej klawiatury, jeśli jest fizyczna.
źródło
Odpowiedzi:
Aby wymusić pojawienie się miękkiej klawiatury, możesz użyć
Aby usunąć fokus
EditText
, niestety trzeba mieć manekina,View
aby się skupić.mam nadzieję, że to pomoże
Aby go zamknąć, możesz użyć
Działa to przy użyciu go w oknie dialogowym
źródło
yourEditText.requestFocus()
opisanym tutaj: stackoverflow.com/questions/8991522/...Miałem ten sam problem. Natychmiast po zmianie tekstu WIDOCZNOŚĆ edit z GONE na VISIBLE musiałem ustawić fokus i wyświetlić miękką klawiaturę. Osiągnąłem to za pomocą następującego kodu:
Działa dla mnie z opóźnieniem 100 ms, ale zakończyło się niepowodzeniem bez opóźnienia lub z opóźnieniem 1 ms.
Skomentowana część kodu pokazuje inne podejście, które działa tylko na niektórych urządzeniach. Testowałem na wersjach systemu operacyjnego 2.2 (emulator), 2.2.1 (prawdziwe urządzenie) i 1.6 (emulator).
Takie podejście zaoszczędziło mi dużo bólu.
źródło
EditText
. W przypadku innych osób, które to czytają, zamiast tworzyć noweHandler
, można również użyćView.postDelayed()
metody na samymyourEditText
widżecie.Aby spowodować pojawienie się klawiatury, użyj
Ta metoda jest bardziej niezawodna niż bezpośrednie wywoływanie InputMethodManager.
Aby go zamknąć, użyj
źródło
InputMethodManager
? (Po pierwsze, to nie działa, w przeciwieństwie do rozwiązania Raukodrauga.)Gdy nic innego nie działa, zmuś to do pokazania :
A później, jeśli chcesz go zamknąć, na przykład w onPause (), możesz wywołać:
źródło
Poniższy kod pochodzi ze kodu źródłowego Google 4.1 dla SearchView. Wygląda na to, że działa dobrze również na mniejszych wersjach Androida.
Następnie należy dodać następujący kod podczas tworzenia kontroli / działania. (W moim przypadku jest to kontrola złożona, a nie działanie).
źródło
setImeVisibility(hasFocus)
?android:windowSoftInputMode="stateAlwaysVisible"
-> w pliku manifestu.edittext.requestFocus();
-> w kodzie.Otworzy się miękka klawiatura, na której tekst edycyjny skupi się na żądaniu, gdy pojawi się aktywność.
źródło
manifest
!Miałem trochę szczęścia w prostych przypadkach z poniższym kodem. Nie ukończyłem wszystkich testów, ale ...
I pojawia się presto klawiatura.
źródło
Możesz spróbować wymusić pojawienie się miękkiej klawiatury, to działa dla mnie:
źródło
Czasami odpowiedź raukodrauga nie działa. Zrobiłem to w ten sposób z kilkoma próbami i błędami:
I część EditText :
źródło
Aby ukryć klawiaturę, użyj tej:
i aby wyświetlić klawiaturę:
źródło
onStart()
i możesz użyć jejgetDialog().getWindow()
jako alternatywy dlagetActivity().getWindow()
.A dla Kotlin wystarczy użyć tych rozszerzeń:
źródło
W przypadku fragmentu upewnij się, że działa:
źródło
showSoftInput
w ogóle mi nie działał.Pomyślałem, że muszę ustawić tryb wprowadzania: (tutaj w komponencie Aktywność w manifeście)
źródło
Wierz lub nie, mój problem z klawiaturą został rozwiązany, gdy odkryłem, że animacje działań mogą wyłączyć klawiaturę. Kiedy wywołasz zamiar za pomocą
i
Może ukryć miękką klawiaturę i nie ma sposobu, aby to pokazać.
źródło
Miałem ten sam problem w różnych różnych sytuacjach, a rozwiązania, które znalazłem, działają w niektórych, ale nie działają w innych, więc oto rozwiązanie łączące, które działa w większości znalezionych sytuacji:
źródło
źródło
Połączyłem wszystko tutaj i dla mnie to działa:
źródło
To zadziałało dla mnie. Możesz spróbować z tym również, aby wyświetlić klawiaturę:
źródło
fragment kodu. . .
źródło
Kotlin
rozszerzenie do pokazywania ostrości na klawiaturze.Jest to kombinacja poprzednich odpowiedzi, które były zbyt długie lub niepełne.
To rozszerzenie publikuje uruchamialną kolejkę komunikatów, która pokazuje klawiaturę programową po zażądaniu fokusa:
W razie potrzeby można to nazwać z dowolnego widoku:
źródło
wystarczy dodać Androida: windowSoftInputMode = "stateHidden" w pliku manifestu ...
źródło
źródło
Wewnątrz manifestu:
android:windowSoftInputMode="stateAlwaysVisible"
- początkowo uruchomiona klawiatura.android:windowSoftInputMode="stateAlwaysHidden"
- początkowo ukryta klawiatura.Lubię używać także
"adjustPan"
dlatego, że kiedy klawiatura się uruchamia, ekran automatycznie się dostosowuje.źródło
Po prostu dodaj tę linię w widoku EditText:
i TADA - klawiatura zaczęła pojawiać się automatycznie!
Miałem podobny problem i odkryłem to proste i dziwne rozwiązanie.
Jak już wspomniano tutaj przez użytkownika 3392439, wygląd klawiatury po fokusie jest niejasno związany z obecnością komponentu przewijania w pliku XML.
Nawet obecność innego widoku EditText, który zawiera wyżej wymienioną linię w tym samym pliku XML, sprawia, że klawiatura pojawia się bez względu na to, który z nich jest aktualnie skoncentrowany.
Jeśli masz przynajmniej jeden widoczny widok zawierający składnik przewijania w pliku XML - klawiatura pojawi się automatycznie na fokusie.
Jeśli nie ma przewijania - musisz kliknąć przycisk Edytuj tekst, aby wyświetlić klawiaturę.
źródło
requesFocus()
z poziomu programu do obsługi kliknięć i jest to jedyny sposób inny niż jawny showSoftInput SHOW_FORCEDWszystkie rozwiązania podane powyżej ( InputMethodManager interakcji w OnFocusChangeListener.onFocusChange słuchacza dołączony do EditText działa dobrze, jeśli masz Single Edit w działalności.
W moim przypadku mam dwie zmiany.
Zauważyłem, że onFocusChange jest uruchamiany dla tvX z hasFocus = true (pokazana klawiatura), ale potem dla tvY z hasFocus = true (klawiatura ukryta). Ostatecznie klawiatura nie była widoczna.
Ogólne rozwiązanie powinno mieć poprawną instrukcję, jeśli „pokaż klawiaturę, jeśli tekst edytora tekstu jest aktywny”
źródło
W sekcji onResume () działania można wywołać metodę bringKeyboard ();
źródło
WidgetUtils.showKeyboard
? To najważniejszy element tutaj.Żadna z odpowiedzi nie działała dla mnie. Oto prosty sposób.
Właśnie opóźniłem metodę requestFocus () o 400 ms.
źródło
Odkryłem dziwne zachowanie, ponieważ w jednej z moich aplikacji klawiatura programowa automatycznie wyświetlała się po wejściu do działania (w funkcji onCreate znajduje się editText.requestFocus ().
Podczas dalszego kopania odkryłem, że dzieje się tak, ponieważ wokół układu znajduje się ScrollView. Po usunięciu ScrollView zachowanie jest takie, jak opisano w pierwotnym zgłoszeniu problemu: tylko po kliknięciu już zaznaczonego tekstu editText pojawia się klawiatura programowa.
Jeśli to nie działa, spróbuj zainstalować ScrollView - i tak jest nieszkodliwy.
źródło
Miałem podobny problem z animacjami widoku . Dlatego umieściłem detektor animacji, aby upewnić się, że zaczekam na zakończenie animacji, zanim spróbuję poprosić o dostęp z klawiatury do pokazanego tekstu edycji.
źródło
Zgadzam się z Raukodraugiem, dlatego używam w swithview, aby poprosić / wyczyścić fokus w następujący sposób:
Pozdrowienia.
źródło