Ustaw początkowy fokus w aplikacji na Androida

86

W mojej aplikacji na Androida automatycznie skupia się na pierwszej, Buttonktórą mam w swoim układzie, nadając jej pomarańczowy kontur. Jak mogę ustawić początkowy fokus najlepiej w XML i czy można to ustawić na zero?

stealthcopter
źródło

Odpowiedzi:

159

Możesz użyć requestFocustagu:

<Button ...>
  <requestFocus />
</Button>

Wydaje mi się jednak dziwne, że automatycznie ustawia ostrość jednego z przycisków, nie zauważyłem tego zachowania w żadnym z moich widoków.

Matthias
źródło
Tak, stało się to teraz z dwoma moimi aplikacjami. Wydaje mi się, że mógłbym requestFocus na elemencie, który nie zmienia się jak TextView, czy byłoby to niedozwolone?
stealthcopter
1
@stealthcopter: czy możesz mi powiedzieć, której wersji Androida używasz. Używam wersji 2.1 i 2.2, ale requestFocus nie działa.
anticafe
Cóż, używałem go we wszystkich wersjach, ale problem, który miałem, zniknął samoczynnie, więc nie badałem zbyt wiele.
stealthcopter
19
Próbowałem podejścia XML, próbowałem podejścia programowego. Jednak EditText zachowuje fokus. BARDZO IRYTUJĄCE !
Someone Somewhere
4
<requestFocus /> jest tutaj: developer.android.com/guide/topics/resources/…
Erik B
64

@Someone Somewhere, próbowałem wszystkich powyższych bezskutecznie. Znaleziona przeze mnie poprawka pochodzi z http://www.helloandroid.com/tutorials/remove-autofocus-edittext-android . Zasadniczo musisz utworzyć niewidoczny układ tuż nad problematycznym przyciskiem:

<LinearLayout android:focusable="true"
              android:focusableInTouchMode="true" 
              android:layout_width="0px"
              android:layout_height="0px" >
    <requestFocus />
</LinearLayout>
Vince Lasmarias
źródło
Byłem w stanie skupić się na AlertDialog i włączenie fokusowania w trybie dotykowym pomogło mi to dobrze. Zasadniczo, oto jak: alert.show (); alert.getButton (AlertDialog.BUTTON_POSITIVE) .setFocusableInTouchMode (true); alert.getButton (AlertDialog.BUTTON_NEGATIVE) .requestFocus ();
Sagar Hatekar
2
Dziękuję Ci! To było jedyne rozwiązanie, które zadziałało w moim przypadku. Chociaż użyłem go nieco inaczej; Umieściłem fokus w pliku RelativeLayoutzawierającym EditText.
kaka
1
Wraz z systemem Android P na platformie pojawiają się następujące zmiany: „Widoki z obszarem 0 (szerokość lub wysokość wynosi 0) nie są już dostępne. Ponadto działania nie przypisują już w sposób niejawny początkowego fokusu w trybie dotykowym. do Ciebie, aby w razie potrzeby wyraźnie zażądać wstępnego fokusu ”.
AustrianDude
28

Ustaw oba :focusablei :focusableInTouchModena prawdę i zadzwoń requestFocus. To załatwia sprawę.

Ruivo
źródło
Tak, to jest prawdziwe rozwiązanie tego problemu. Dzięki Anders
gokhansari
23

Uważam, że to działa najlepiej dla mnie.

W AndroidManifest.xml <activity> elementdodajandroid:windowSoftInputMode="stateHidden"

Powoduje to zawsze ukrycie klawiatury podczas rozpoczynania działania.

James
źródło
Łatwo i czysto!
SHADOW.NET
świetnie ... to jest bardzo imponujące!
gumuruh
11

Po prostu dodaję ten wiersz kodu do onCreate():

this.getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

Problem rozwiązany.

Sam Tang
źródło
Działa na Androidzie 2.3.3.
Gaurav Agarwal,
7

Użyj poniższego kodu,

TableRow _tableRow =(TableRow)findViewById(R.id.tableRowMainBody);
tableRow.requestFocus();

to powinno działać.

jcw
źródło
3

@Someone Somewhere Użyłem tego do wyraźnego skupienia:

editText.clearFocus();

i to pomaga

Ruobin Wang
źródło
1
android:focusedByDefault="true"
TiyebM
źródło