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?

Stealthcopter
quelle

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.

Matthias
quelle
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
4
<requestFocus /> ist hier: developer.android.com/guide/topics/resources/…
Erik B
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>
Vince Lasmarias
quelle
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.

Ruivo
quelle
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.

James
quelle
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.

Sam Tang
quelle
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.

jcw
quelle
3

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

editText.clearFocus();

und es hilft

Ruobin Wang
quelle
0
android:focusedByDefault="true"
TiyebM
quelle