Używam AlertDialog.Builder w celu utworzenia pola wprowadzania, z EditText jako metodą wprowadzania.
Niestety, miękka klawiatura nie wyskakuje, mimo że tekst edycji jest aktywny , chyba że ponownie go wyraźnie dotkniesz.
Czy jest sposób, aby zmusić go do popu?
Wypróbowałem następujące, po (AlertDialog.Builder) .show (); ale bezskutecznie.
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(input, InputMethodManager.SHOW_FORCED);
Czy ktoś może pomóc?
Dzięki!!
Odpowiedzi:
Zrobiłem coś takiego
źródło
OnFocusChangeListener
podejścia wydają mi się zbyt trudne i powodują kłopoty. Musisz stworzyćAlertDialog
zAlertDialog.Builder
!setSoftInputMode
linię wcześniejdialog.show()
lub nie zadziała. +1 za proste, poprawne rozwiązanie przy okazjiUdało mi się to rozwiązać w ten sposób:
źródło
Dowiedziałem się, że ten sam kod działa poprawnie na tablecie, klawiatura wyskakuje, ale na telefonie tak nie jest, więc dalsze badania wydają się wskazywać na opcję „dostosuj”.
Używam tego, jest znacznie czystszy.
źródło
SOFT_INPUT_STATE_ALWAYS_VISIBLE
. JakSOFT_INPUT_STATE_ALWAYS_VISIBLE
będzie blokować elementy interfejsu użytkownika okna dialogowego, gdzieSOFT_INPUT_ADJUST_RESIZE
można zmienić rozmiar i „podnieść” okno dialogowe.W moim przypadku jedyny sposób, w jaki mogłem wyświetlić klawiaturę, gdy okno dialogowe było wyświetlane, to dodanie do
DialogFragment
:Zwróć uwagę na SOFT_INPUT_STATE_ALWAYS_VISIBLE zamiast SOFT_INPUT_STATE_VISIBLE .
Z dokumentacji:
źródło
Kiedy wywołujesz showDialog, aby wyświetlić dialog utworzony za pomocą AlertDialog w onCreateDialog
Powinieneś umieścić kod tutaj
źródło
Podano tutaj znacznie lepsze rozwiązanie .
Brak obejścia.
EditText
zachowuje się zgodnie z oczekiwaniami.źródło
źródło
Tu już udzielono odpowiedzi . U mnie zadziałało używanie OnFocusChangeListener.
źródło
W moim przypadku SoftInputMode nie był wyświetlany, gdy ustawiłem go przed wyświetleniem okna dialogowego (po jego utworzeniu). Poniższy kod zadziałał dla mnie, gdzie ustawiam SoftInputMode po wyświetleniu okna dialogowego.
Kotlin:
Jawa:
Mam nadzieję, że pomoże to każdemu, kto miał ten sam problem co ja.
źródło
Spróbuj tego, to działa dla mnie
Jeśli chcesz wyświetlić klawiaturę ekranową:
A jeśli chcesz to ukryć:
źródło
źródło
Ten problem występuje, gdy EditText jest dodawany po wywołaniu AlertDialog.onCreate.
https://developer.android.com/reference/androidx/appcompat/app/AlertDialog.Builder
Musisz wyczyścić flagę FLAG_ALT_FOCUSABLE_IM.
Ponieważ AlertDialog.show jest wywoływana w DialogFragment.onStart, można wstawić kod w DialogFragment.onStart.
Lub możesz użyć Dialog.setOnShowListener, jeśli nie używasz DialogFragment.
źródło