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.