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?

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.


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


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>

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ę.


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.


Ł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.


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ć.


3

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

editText.clearFocus();

i to pomaga


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.