Définir le focus initial dans une application Android

86

Dans mon application Android, il concentre automatiquement le premier que Buttonj'ai dans ma mise en page, en lui donnant un contour orange. Comment puis-je définir le focus initial de préférence en XML, et peut-il être défini sur rien?

furtif
la source

Réponses:

159

Vous pouvez utiliser la requestFocusbalise:

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

Je trouve étrange cependant qu'il concentre automatiquement l'un de vos boutons, je n'ai observé ce comportement dans aucune de mes vues.

Matthias
la source
Ouais, c'est arrivé avec deux de mes applications maintenant. Je suppose que je pourrais demanderFocus sur un élément qui ne change pas comme un TextView ou ne serait-ce pas autorisé?
stealthcopter
1
@stealthcopter: pouvez-vous me dire quelle version d'Android vous utilisez. J'utilise 2.1 et 2.2, mais requestFocus ne fonctionne pas.
anticafe
Eh bien, je l'ai utilisé dans toutes les versions, mais le problème que j'avais semblait disparaître tout seul, donc je n'ai pas beaucoup enquêté.
stealthcopter
19
J'ai essayé l'approche XML, j'ai essayé l'approche programmatique. Pourtant, le EditText conserve le focus. TRÈS ENNUYANT !
Someone Somewhere
4
<requestFocus /> est ici: developer.android.com/guide/topics/resources/…
Erik B
64

@Someone Somewhere, j'ai essayé tout ce qui précède en vain. Le correctif que j'ai trouvé provient de http://www.helloandroid.com/tutorials/remove-autofocus-edittext-android . Fondamentalement, vous devez créer une mise en page invisible juste au-dessus du bouton problématique:

<LinearLayout android:focusable="true"
              android:focusableInTouchMode="true" 
              android:layout_width="0px"
              android:layout_height="0px" >
    <requestFocus />
</LinearLayout>
Vince Lasmarias
la source
J'ai pu me concentrer sur un AlertDialog et l'activation du mode tactile focalisable m'a aidé à faire les choses correctement. Essentiellement, voici comment: alert.show (); alert.getButton (AlertDialog.BUTTON_POSITIVE) .setFocusableInTouchMode (true); alert.getButton (AlertDialog.BUTTON_NEGATIVE) .requestFocus ();
Sagar Hatekar le
2
Merci! C'était la seule solution qui fonctionnait dans mon cas. Bien que je l'ai utilisé légèrement différent; J'ai mis le focus dans un RelativeLayoutcontenant le EditText.
kaka le
1
Avec Android P, les modifications suivantes arrivent sur la plate-forme: "Les vues avec une zone 0 (une largeur ou une hauteur est égale à 0) ne peuvent plus être mises au point. De plus, les activités n'attribuent plus implicitement la mise au point initiale en mode tactile. Au lieu de cela, elles sont actives à vous de demander explicitement la mise au point initiale, si vous le souhaitez. "
AustrianDude
28

Réglez les deux :focusableet :focusableInTouchModesur true et appelez requestFocus. Ça fait l'affaire.

Ruivo
la source
Oui, c'est la vraie solution pour y remédier. Merci Anders
gokhansari
23

J'ai trouvé que cela fonctionnait le mieux pour moi.

Dans AndroidManifest.xml, <activity> elementajoutezandroid:windowSoftInputMode="stateHidden"

Cela masque toujours le clavier lors de l'entrée dans l'activité.

James
la source
Facile et propre!
SHADOW.NET
super ... c'est très impressionnant!
gumuruh
11

J'ajoute simplement cette ligne de code dans onCreate():

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

Problème résolu.

Sam Tang
la source
Fonctionne sous Android 2.3.3.
Gaurav Agarwal
7

Utilisez le code ci-dessous,

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

Cela devrait fonctionner.

jcw
la source
3

@Someone Somewhere j'ai utilisé ceci pour clarifier le focus:

editText.clearFocus();

et ça aide

Ruobin Wang
la source
1
android:focusedByDefault="true"
TiyebM
la source