Mam Activity
w Androidzie, z dwoma elementami:
EditText
ListView
Kiedy mój Activity
zaczyna, EditText
natychmiast ma fokus wejściowy (migający kursor). Nie chcę, aby jakakolwiek kontrola skupiała się na wejściu podczas uruchamiania. Próbowałem:
EditText.setSelected(false);
EditText.setFocusable(false);
Brak szczęścia. Jak mogę przekonać, EditText
aby nie wybierać się po uruchomieniu Activity
?
android:focusableInTouchMode="true"
!android:focusableInTouchMode="true"
coverandroid:focusable="true"
+ trochę więcej, więc w tym przypadkuandroid:focusable="true"
jest niepotrzebny i można go usunąć. Dodatkowo widok fikcyjny może być Widok zamiast LinearLayout. Oszczędza to moc przetwarzania + oszczędza od niektórych ostrzeżeń. Tak więc, moim zaleceniem jest zastąpienie widoku manekina<View android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"/>
Czy faktyczny problem polega na tym, że po prostu nie chcesz, żeby się skupiał? A może nie chcesz, aby pokazywała wirtualną klawiaturę w wyniku skupienia
EditText
? Naprawdę nie widzę problemu zEditText
skupieniem się na starcie, ale zdecydowanie jest problem z otwarciem okna softInput, gdy użytkownik nie poprosił wyraźnie o skupienie się naEditText
(i w rezultacie otwórz klawiaturę).Jeśli jest to problem z klawiaturą wirtualną, zobacz dokumentację
AndroidManifest.xml
elementu <activity> .android:windowSoftInputMode="stateHidden"
- zawsze chowaj to, wchodząc w działanie.lub
android:windowSoftInputMode="stateUnchanged"
- nie zmieniaj go (np. nie pokazuj go, jeśli nie jest jeszcze pokazany, ale jeśli był otwarty podczas wchodzenia w działanie, pozostaw to otwarte).źródło
EditText
skupienie się. W rzeczywistości wyraźnie stwierdza, że w ten sposób zapobiega się automatycznemu otwieraniu edytora IME klawiatury programowej ; ponieważ bardziej prawdopodobne jest, że większym problemem będzie nieoczekiwanie wyskakująca miękka klawiatura, a nie sama ostrość. Jeśli twój problem wEditText
ogóle się koncentruje, skorzystaj z odpowiedzi innej osoby.Istnieje prostsze rozwiązanie. Ustaw następujące atrybuty w układzie nadrzędnym:
A teraz, gdy aktywność się zacznie, ten główny układ zostanie domyślnie ustawiony na fokus.
Możemy również usunąć fokus z widoków podrzędnych w czasie wykonywania (np. Po zakończeniu edycji podrzędnej), ponownie nadając fokus układowi głównemu:
Dobry komentarz od Guillaume Perrot :
Naprawdę możemy zobaczyć, że
beforeDescendants
zestaw jest domyślny wViewGroup.initViewGroup()
metodzie (Android 2.2.2). Ale nie równa 0.ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;
Dzięki Guillaume.
źródło
Jedyne znalezione przeze mnie rozwiązanie to:
android:focusable="true"
iandroid:focusableInTouchMode="true"
I
EditText
nie skupi się po rozpoczęciu aktywnościźródło
Problem wydaje się wynikać z właściwości, którą widzę tylko w
XML form
układzie.Pamiętaj o usunięciu tego wiersza na końcu deklaracji w
EditText
tagach XML:To powinno dać coś takiego:
źródło
korzystając z informacji dostarczonych przez inne plakaty, zastosowałem następujące rozwiązanie:
w układzie XML
w onCreate ()
i wreszcie w onResume ()
źródło
Spróbuj clearFocus () zamiast
setSelected(false)
. Każdy widok w Androidzie ma zarówno możliwość ustawiania ostrości, jak i wybierania, i myślę, że chcesz po prostu wyczyścić ostrość.źródło
myEditText.clearFocus(); myDummyLinearLayout.requestFocus();
wonResume
ramach działania. Dzięki temu EditText nie utrzymywał ostrości, gdy telefon był obrócony.Poniższe spowoduje, że edytowany tekst nie będzie się skupiał po utworzeniu, ale złapie go, gdy go dotkniesz.
Więc ustawiłeś focus na false w xml, ale klucz znajduje się w Javie, do której dodajesz następujący detektor:
Ponieważ zwracasz wartość false, tzn. Nie konsumujesz zdarzenia, zachowanie skupienia będzie przebiegać normalnie.
źródło
Próbowałem kilka odpowiedzi osobno, ale fokus jest nadal edytowany. Udało mi się to rozwiązać tylko przy użyciu dwóch poniższych rozwiązań.
(Referencje od Silver https://stackoverflow.com/a/8639921/15695 )
i usuń
w EditText
(Odwołanie od floydaddict https://stackoverflow.com/a/9681809 )
źródło
Późna, ale najprostsza odpowiedź, po prostu dodaj to w nadrzędnym układzie XML.
Głosuj, jeśli ci to pomogło! Happy Coding :)
źródło
Żadne z tych rozwiązań nie działało dla mnie. Sposób, w jaki naprawiłem autofocus, to:
źródło
Proste rozwiązanie:
AndroidManifest
wActivity
użyciu taguźródło
Możesz po prostu ustawić „ ustawialne ” i „ustawialne w trybie dotykowym”, aby wartość true była ustawiona na pierwszym
TextView
zlayout
. W ten sposób, po uruchomieniu działalności zaTextView
skupi się jednak, ze względu na swój charakter, widać nic koncentruje się na ekranie i, oczywiście, nie będzie bez klawiatury wyświetlane ...źródło
Poniższe działało dla mnie w
Manifest
. Pisać ,źródło
Musiałem programowo usunąć skupienie ze wszystkich dziedzin. Właśnie dodałem następujące dwie instrukcje do mojej głównej definicji układu.
Otóż to. Natychmiast naprawiłem mój problem. Dzięki, Silver, za wskazanie mi właściwego kierunku.
źródło
Dodaj
android:windowSoftInputMode="stateAlwaysHidden"
znacznik aktywnościManifest.xml
pliku.Źródło
źródło
Jeśli masz inny pogląd na swoją aktywność, np.
ListView
, Możesz również:w twoim
onResume()
celu skupienia się naeditText
.Wiem, że udzielono odpowiedzi na to pytanie, ale po prostu zapewniłem alternatywne rozwiązanie, które zadziałało :)
źródło
Wypróbuj to przed pierwszym edytowalnym polem:
źródło
Dodaj następującą
onCreate
metodę:źródło
Ponieważ nie lubię zanieczyszczać XML-a czymś, co jest związane z funkcjonalnością, stworzyłem tę metodę, która „transparentnie” kradnie fokus od pierwszego widoku, na którym można ustawić fokus, a następnie usuwa się w razie potrzeby!
źródło
Spóźniony, ale może pomocny. Tworzenie EditText manekina w górnej części układu następnie wywołać
myDummyEditText.requestFocus()
wonCreate()
To wydaje się zachowywać tak, jak się spodziewam. Nie trzeba obsługiwać zmian konfiguracji itp. Potrzebowałem tego do działania z długim TextView (instrukcje).
źródło
Napisz ten wiersz w układzie nadrzędnym ...
źródło
Tak, zrobiłem to samo - stworzyłem „obojętny” układ liniowy, który początkowo się skupia. Ponadto ustawiam identyfikatory „następnego” fokusa, aby użytkownik nie mógł już ustawić ostrości po przewinięciu:
dużo pracy, żeby się nie skupić na widoku ...
Dzięki
źródło
Dla mnie to, co działało na wszystkich urządzeniach, to:
Po prostu umieść to jako widok przed problematycznym widokiem skoncentrowanym i to wszystko.
źródło
Najprostszą rzeczą, jaką zrobiłem, jest skupienie się na innym widoku w programie onCreate:
To zatrzymało zbliżanie się miękkiej klawiatury i nie było migania kursora w EditText.
źródło
To idealne i najłatwiejsze rozwiązanie. Zawsze używam tego w mojej aplikacji.
źródło
źródło
Wpisz ten kod w
Manifest
pliku, wActivity
którym nie chcesz otwierać klawiatury.Plik manifestu:
źródło
W
onCreate
swojej działalności po prostu dodaj użycieclearFocus()
elementu EditText. Na przykład,A jeśli chcesz zmienić fokus na inny element, użyj
requestFocus()
tego. Na przykład,źródło
Używam następującego kodu, aby zatrzymać kradzież fokusu EditText po naciśnięciu mojego przycisku.
Zasadniczo ukryj edytowany tekst, a następnie pokaż go ponownie. To działa dla mnie, ponieważ EditText nie jest widoczny, więc nie ma znaczenia, czy się wyświetla.
Możesz spróbować ukryć i pokazywać go kolejno, aby sprawdzić, czy to pomoże mu stracić koncentrację.
źródło