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?

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.


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


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>

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.


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


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.


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.


3

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

editText.clearFocus();

et ça aide


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.