Wyświetlam pole wprowadzania za pomocą AlertDialog
. Samo EditText
okno dialogowe jest automatycznie ustawiane, gdy dzwonię AlertDialog.show()
, ale klawiatura programowa nie jest automatycznie wyświetlana.
Jak ustawić automatyczne wyświetlanie klawiatury miękkiej, gdy wyświetlane jest okno dialogowe? (i nie ma fizycznej / sprzętowej klawiatury). Podobnie jak po naciśnięciu przycisku Wyszukaj, aby wywołać globalne wyszukiwanie, klawiatura programowa jest automatycznie wyświetlana.
android
keyboard
android-edittext
soft-keyboard
Randy Sugianto „Yuku”
źródło
źródło
Odpowiedzi:
Można utworzyć ostrości słuchacza na
EditText
sprawieAlertDialog
, a następnie dostaćAlertDialog
„sWindow
. Stamtąd możesz wyświetlić miękką klawiaturę, dzwoniącsetSoftInputMode
.źródło
final AlertDialog dialog = builder.create()
a następnieshow
w oknie dialogowym zamiast konstruktora.Aby wyświetlić użycie klawiatury:
Aby ukryć użycie klawiatury:
źródło
Możesz poprosić o klawiaturę ekranową zaraz po utworzeniu okna dialogowego (test na SDK - r20)
źródło
Miałem ten sam problem i rozwiązałem go za pomocą następującego kodu. Nie jestem pewien, jak to będzie działać na telefonie z klawiaturą sprzętową.
źródło
Znalazłem ten przykład http://android-codes-examples.blogspot.com/2011/11/show-or-hide-soft-keyboard-on-opening.html . Dodaj następujący kod tuż przed
alert.show()
.źródło
lub
źródło
stateHidden
a kiedy wykryłem, że użytkownik tworzy nowy element, wyświetliłem klawiaturę, używając wspomnianej linii kodu. :) Jeszcze raz dziękuję.((Activity) context).getWindow()....
.Fragmenty kodu z innych odpowiedzi działają, ale nie zawsze jest oczywiste, gdzie umieścić je w kodzie, szczególnie jeśli używasz
AlertDialog.Builder
i postępowałeś zgodnie z oficjalnym samouczkiem dialogowym, ponieważ nie używa onfinal AlertDialog ...
lubalertDialog.show()
.Lepiej jest
Ponieważ SOFT_INPUT_STATE_ALWAYS_VISIBLE ukryje klawiaturę, jeśli fokus przełączy się z EditText, gdzie SHOW_FORCED będzie wyświetlał klawiaturę do momentu jej jawnego zwolnienia, nawet jeśli użytkownik powróci do ekranu głównego lub wyświetli najnowsze aplikacje.
Poniżej znajduje się działający kod dla AlertDialog utworzonego przy użyciu niestandardowego układu z EditText zdefiniowanym w XML. Ustawia również klawiaturę na klawisz „go” i pozwala na uruchomienie przycisku dodatniego.
alert_dialog.xml:
AlertDialog.java:
źródło
Cóż, to dość stary post, wciąż jest coś do dodania.
Są 2 proste metody, które pomagają mi kontrolować klawiaturę i działają one idealnie:
Pokaż klawiaturę
Ukryj klawiaturę
źródło
getCurrentFocus()
?Activity
.Pozwól mi wskazać dodatkowe informacje na temat rozwiązania yuku, ponieważ trudno mi było uruchomić to! Jak uzyskać obiekt AlertDialog z mojego AlertDialog.Builder? To wynik mojej
alert.show()
egzekucji:źródło
Spójrz na tę dyskusję, która obsługuje ręczne ukrywanie i pokazywanie edytora IME. Mam jednak wrażenie, że jeśli fokus
EditText
nie wyświetla IME, dzieje się tak dlatego, że wywołujeszAlertDialog.show()
swojąOnCreate()
lub inną metodę, która jest wywoływana przed wyświetleniem ekranu.OnPostResume()
Wierzę, że przeniesienie go do powinno to naprawić.źródło
Tak, możesz to zrobić
setOnFocusChangeListener
, pomoże ci.źródło
Wiem, że to pytanie jest stare, ale myślę, że użycie funkcji rozszerzenia jest ładniejszym sposobem pokazania klawiatury do edycji tekstu
Oto metoda, której używam do wyświetlania klawiatury dla tekstu edycji.
kod kotlin: wystarczy zadzwonić
edittext.showKeyboard()
kod Java:
źródło
Jeśli ktoś otrzymuje:
Spróbuj dodać kontekst do wywołania getSystemService.
Więc
źródło
Oryginalne pytanie dotyczy okien dialogowych, a mój tekst EditText jest wyświetlany regularnie. W każdym razie podejrzewam, że to powinno zadziałać także dla większości z was. Oto, co działa dla mnie (wyżej sugerowana metoda najwyżej oceniona nic dla mnie nie zrobiła). Oto niestandardowy EditView, który to robi (podklasowanie nie jest konieczne, ale uznałem, że jest to wygodne dla moich celów, ponieważ chciałem również skupić się, gdy widok staje się widoczny).
W rzeczywistości jest to w dużej mierze to samo, co odpowiedź na pytanie. Właściwie wcale nie zauważyłem jego odpowiedzi, ponieważ miała zero głosów. Potem miałem właśnie skomentować jego post, ale byłoby to zbyt długo, więc i tak przestałem to robić. Tidbeck podkreśla, że nie jest pewien, jak to działa z urządzeniami wyposażonymi w klawiatury. Mogę potwierdzić, że zachowanie wydaje się dokładnie takie samo w obu przypadkach. Jest to spowodowane tym, że w trybie pionowym klawiatura programowa się wysuwa, a w trybie poziomym nie. Wysuwanie się fizycznej klawiatury nie ma znaczenia w moim telefonie.
Bo ja osobiście uważam zachowanie nieco niewygodne Zdecydowałem się przy użyciu:
InputMethodManager.SHOW_FORCED
. Działa tak, jak chciałem. Klawiatura staje się widoczna niezależnie od orientacji, jednak przynajmniej na moim urządzeniu nie wyskakuje, jeśli klawiatura sprzętowa została wysunięta.źródło
Problemem wydaje się być to, że ponieważ miejsce, w którym wpisujesz tekst, jest początkowo ukryte (albo zagnieżdżone, czy coś takiego), AlertDialog automatycznie ustawia flagę
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
lub w tenWindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
sposób, że rzeczy nie wyzwalają miękkiego wejścia do wyświetlenia.Aby to naprawić, dodaj następujące elementy:
źródło
spróbuj i użyj:
źródło
Aby wyświetlić klawiaturę, musiałem wykonać następujące czynności
Android TextField: programowo ustaw ostrość + miękkie wprowadzanie
Zasadniczo rozwiązanie jest następujące
Gdzie
ShowKeyboard
jestPo udanym wprowadzeniu upewniam się również, że ukryłem klawiaturę
źródło
Umieść te metody w swojej klasie Util i używaj ich w dowolnym miejscu.
Kotlin
Jawa
źródło
Stworzyłem ładne funkcje rozszerzenia kotlin-esqe, jeśli ktoś jest zainteresowany
źródło
To jest dobra próbka dla Ciebie:
źródło
Dlaczego ta odpowiedź - Ponieważ powyższe rozwiązanie pokaże klawiaturę, ale nie zniknie, jeśli klikniesz gdziekolwiek indziej
EditText
. Musisz więc zrobić coś, aby klawisz klawiatury zniknął, gdyEditText
straci ostrość.Możesz to osiągnąć, wykonując następujące czynności:
Ustaw widok nadrzędny (widok zawartości Twojej aktywności), na który można kliknąć, i można go ustawić, dodając następujące atrybuty
Zaimplementuj metodę hideKeyboard ()
Na koniec ustaw onFocusChangeListener swojego tekstu edytującego.
źródło
To trochę trudne. Zrobiłem w ten sposób i zadziałało.
1. Pierwsze połączenie, aby ukryć miękkie wejście z okna. To ukryje miękkie wejście, jeśli miękka klawiatura jest widoczna lub nie rób nic, jeśli nie jest.
2. Pokaż swoje okno dialogowe
3. Następnie wystarczy zadzwonić, aby przełączyć miękkie wprowadzanie.
kod:
źródło
Spróbuj tego
źródło
Próbowałem wielu, ale to właśnie dla mnie zadziałało (kotlin):
źródło
Patrząc na https://stackoverflow.com/a/39144104/2914140 uprościłem trochę:
Jest lepszy niż https://stackoverflow.com/a/11155404/2914140 :
ponieważ po naciśnięciu przycisku Strona główna i przejściu do ekranu głównego klawiatura pozostanie otwarta.
źródło
Wywołuję to w funkcji onCreate (), aby automatycznie wyświetlać klawiaturę po wejściu w działanie.
źródło