Mam stosunkowo proste pytanie. Mam aktywność z dużą ilością EditText'ów. Kiedy otwieram działanie, automatycznie koncentruje się na pierwszym EditText i wyświetla wirtualną klawiaturę.
Jak mogę temu zapobiec?
Mam stosunkowo proste pytanie. Mam aktywność z dużą ilością EditText'ów. Kiedy otwieram działanie, automatycznie koncentruje się na pierwszym EditText i wyświetla wirtualną klawiaturę.
Jak mogę temu zapobiec?
Odpowiedzi:
Użyj tych atrybutów w swoim tagu układu w pliku XML:
Jak informują inni członkowie w komentarzach, to nie działa,
ScrollView
dlatego musisz dodać te atrybuty do głównego elementu podrzędnegoScrollView
.źródło
Możesz dodać to do swojej aktywności w Android Manifest:
źródło
android:windowSoftInputMode="stateHidden|adjustPan"
Mam kilka opisanych tutaj implementacji, ale teraz dodałem do
AndroidManifest.xml
dla mojejActivity
nieruchomości:Myślę, że to łatwy sposób, nawet jeśli używasz
fragments
.źródło
Jeśli masz inny widok na swoją aktywność, taki jak a
ListView
, możesz również:w swoim onResume (), aby pobrać fokus z pliku
editText
.Wiem, że odpowiedź na to pytanie została udzielona, ale zapewniam tylko alternatywne rozwiązanie, które zadziałało dla mnie :)
źródło
https://stackoverflow.com/a/11627976/5217837 To jest prawie poprawne:
Ale powinno to być raczej SOFT_INPUT_STATE_HIDDEN niż SOFT_INPUT_STATE_ALWAYS_VISIBLE
źródło
Użyj tego w kodzie swojej aktywności:
źródło
Miałem podobny problem, nawet podczas przełączania kart klawiatura pojawiała się automatycznie i pozostawała włączona, z Androidem 3.2.1 na tablecie. Użyj następującej metody:
W onCreate () i onPause () działania dla każdego EditText:
setEditTextFocus (myEditText, false);
Dla każdego EditText i OnTouchListener:
Dla każdego
EditText
wOnEditorActionListener
:I dla każdego
EditText
wlayout xml
:Prawdopodobnie jest więcej możliwości optymalizacji kodu.
źródło
źródło
Znalazłem to proste rozwiązanie, które zadziałało. Ustaw następujące atrybuty w układzie nadrzędnym:
A teraz, gdy czynność się rozpocznie, ten główny układ zostanie domyślnie ustawiony.
Możemy również usunąć fokus z widoków podrzędnych w czasie wykonywania, ponownie ustawiając fokus na głównym układzie, na przykład:
Mam nadzieję, że to zadziała.
źródło
to jest rozwiązanie, którego używam, nie jest to najlepsze rozwiązanie, ale działa dobrze
źródło
Co ciekawe, w tej dokumentacji https://developer.android.com/training/keyboard-input/visibility.html stwierdza się, że kiedy czynność się rozpoczyna i fokus jest przenoszony na pole tekstowe, klawiatura programowa nie jest wyświetlana (a następnie przechodzi do pokaże ci, jak wyświetlić klawiaturę, jeśli chcesz z jakimś kodem).
Na moim Samsungu Galaxy S5 tak działa moja aplikacja (bez wpisu manifestu lub określonego kodu) - bez miękkiej klawiatury. Jednak na Lollipop AVD jest pokazana miękka klawiatura - wbrew powyższej dokumentacji.
Jeśli zauważysz takie zachowanie podczas testowania w AVD, możesz przetestować na prawdziwym urządzeniu, aby zobaczyć, co się stanie.
źródło
To ma kilka dobrych odpowiedzi w następującym poście: Zatrzymaj EditText przed uzyskaniem fokusu podczas uruchamiania działania . Ten, którego regularnie używam, to następujący kod Morgana :
UWAGA: Atrapa musi być UMIESZCZONA PRAWO PRZED elementem, na który można ustawić ostrość.
I myślę, że powinno działać idealnie nawet ze ScrollView i nie miał też żadnych problemów z dostępnością.
źródło
Dzieje się tak, gdy EditText automatycznie otrzymuje fokus, gdy zaczyna się Twoja aktywność. Tak więc jednym z łatwych i stabilnych sposobów rozwiązania tego problemu jest po prostu ustawienie początkowego fokusu na dowolny inny widok, taki jak przycisk itp.
Możesz to zrobić w swoim układzie XML, bez kodu.
źródło
Zaakceptowana odpowiedź nie działa dla mnie, dlatego daj odpowiedź działające rozwiązanie, może być pomocne!
Teraz klawiatura jest otwarta ciesz się :)
źródło
Pracować w porządku
źródło
Dodaj poniższy kod na początku pliku XML aktywności i upewnij się, że widok znajduje się nad EditText
źródło
android:focusableInTouchMode="true"
Dodaj powyższą linię do xml
EditText
lubTextInputLayout
która ma fokus i powodujesoftInputKeyboard
wyskakiwanie.To rozwiązało problem i teraz klawiatura nie wyskakuje
źródło
search_edit_text = (EditText) findViewById (R.id.search_edit_text);
To działa dla mnie, chłopaki, fragment może mieć inną składnię. TO DZIAŁA DLA AKTYWNOŚCI
źródło
Jeśli twój widok ma EditText i Listview, klawiatura otworzy się domyślnie. Aby domyślnie ukryć wyświetlanie klawiatury, wykonaj następujące czynności
Upewnij się, że żądasz skupienia się na widoku listy po uzyskaniu widoku dla editText.
Np
Jeśli to zrobisz, editText uzyska fokus i pojawi się klawiatura.
źródło