Legen Sie den anfänglichen Fokus in einer Android-Anwendung fest


85

In meiner Android-Anwendung fokussiert es automatisch das erste, das Buttonich in meinem Layout habe, und gibt ihm einen orangefarbenen Umriss. Wie kann ich den anfänglichen Fokus vorzugsweise in XML setzen und kann dies auf nichts gesetzt werden?

Antworten:


159

Sie könnten das requestFocusTag verwenden:

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

Ich finde es seltsam, dass eine Ihrer Schaltflächen automatisch fokussiert wird. Ich habe dieses Verhalten in keiner meiner Ansichten beobachtet.


Ja, das ist jetzt bei zwei meiner Anwendungen passiert. Ich denke, ich könnteFocus auf ein Element anfordern, das sich nicht wie eine Textansicht ändert, oder wäre dies nicht zulässig?
Stealthcopter

1
@stealthcopter: Kannst du mir sagen, welche Android-Version du verwendest? Ich verwende 2.1 und 2.2, aber requestFocus funktioniert nicht.
Anticafe

Nun, ich habe es in allen Versionen verwendet, aber das Problem, das ich hatte, schien von selbst zu verschwinden, so dass ich nicht viel untersucht habe.
Stealthcopter

18
Ich habe den XML-Ansatz ausprobiert, ich habe den programmatischen Ansatz ausprobiert. Der EditText behält jedoch den Fokus. SEHR NERVIG !
Jemand irgendwo


63

@ Jemand Irgendwo habe ich all das ohne Erfolg versucht. Das Update, das ich gefunden habe, stammt von http://www.helloandroid.com/tutorials/remove-autofocus-edittext-android . Grundsätzlich müssen Sie ein unsichtbares Layout direkt über der problematischen Schaltfläche erstellen:

<LinearLayout android:focusable="true"
              android:focusableInTouchMode="true" 
              android:layout_width="0px"
              android:layout_height="0px" >
    <requestFocus />
</LinearLayout>

Ich konnte mich auf einen AlertDialog konzentrieren und die Aktivierung von focusableintouchmode half mir, es richtig zu machen. Im Wesentlichen geht es so: alert.show (); alert.getButton (AlertDialog.BUTTON_POSITIVE) .setFocusableInTouchMode (true); alert.getButton (AlertDialog.BUTTON_NEGATIVE) .requestFocus ();
Sagar Hatekar

2
Danke dir! Dies war die einzige Lösung, die in meinem Fall funktioniert hat. Obwohl ich es etwas anders benutzt habe; Ich habe das Fokusmaterial in ein RelativeLayoutenthalten, das das enthält EditText.
Kaka

1
Mit Android P werden folgende Änderungen an der Plattform vorgenommen: "Ansichten mit einem Bereich von 0 (entweder eine Breite oder eine Höhe ist 0) können nicht mehr fokussiert werden. Außerdem weisen Aktivitäten im Touch-Modus nicht mehr implizit den anfänglichen Fokus zu. Stattdessen ist er aktiv auf Wunsch explizit den ersten Fokus anfordern. "
AustrianDude

27

Setzen Sie beide :focusableund :focusableInTouchModeauf true und call requestFocus. Es macht den Trick.


Ja, dies ist die wahre Lösung, um das Problem zu beheben. Vielen Dank Anders
Gokhansari

23

Ich fand, dass dies für mich am besten funktionierte.

In AndroidManifest.xml <activity> elementhinzufügenandroid:windowSoftInputMode="stateHidden"

Dadurch wird die Tastatur bei der Eingabe der Aktivität immer ausgeblendet.


Einfach und sauber!
SHADOW.NET

toll ... das ist sehr beeindruckend!
Gumuruh

11

Ich füge diese Codezeile einfach hinzu in onCreate():

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

Problem gelöst.


Funktioniert in Android 2.3.3.
Gaurav Agarwal

7

Verwenden Sie den folgenden Code:

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

das sollte funktionieren.


3

@Someone Irgendwo habe ich dies verwendet, um den Fokus zu löschen:

editText.clearFocus();

und es hilft


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.