432 votes

Android : Forcer le retrait du focus d'un EditText ?

J'aimerais pouvoir retirer le focus de l'EditText. Par exemple, si le clavier apparaît et que l'utilisateur le cache à l'aide du bouton de retour, je voudrais que le focus et le curseur disparaissent. Comment cela peut-il être fait ?

0 votes

Existe-t-il une autre vue qui peut être focalisée après l'EditText ?

0 votes

Est-il possible de mettre au point une WebView ?

0 votes

Voir ma réponse ici : stackoverflow.com/questions/3890033/

447voto

xtr Points 1633

Vous pouvez faire disparaître le curseur et le focus en

edittext.clearFocus();

Mais détecter quand le clavier se cache est un travail difficile.

66 votes

ClearFocus() ne fonctionne pas.

211 votes

Cela fonctionne, mais il remet le focus sur la première vue focalisable dans l'activité, donc si vous n'avez qu'une seule vue dans l'activité vous pouvez penser que cela ne fonctionne pas, mais cela fonctionne, vous devez comprendre son comportement :)

0 votes

Comment faire pour renvoyer le focus sur l'EditText ? J'ai essayé d'utiliser .requestFocus() ; mais cela ne semble pas fonctionner. Merci d'avance.

284voto

Wayner Points 911

vous pouvez ajouter ceci à onCreate et cela cachera le clavier à chaque fois que l'activité démarre Vous pouvez également changer le focus sur un autre élément de façon programmatique.

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

0 votes

Fonctionne sur M Preview. Merci de votre compréhension.

0 votes

Comment faire cela sur un DialogFragment ?

0 votes

@Mr.Noob Si vous avez un champ de texte à l'intérieur de votre DialogFragment, c'est exactement la même chose.

190voto

Singh Arjun Points 606

Ajoutez la mise en page linéaire avant de modifier le texte dans votre xml.

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

ou vous pouvez faire la même chose en ajoutant ces lignes à afficher avant votre "edittext".

 <Button
        android:id="@+id/btnSearch"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:gravity="center"
        android:text="Quick Search"
        android:textColor="#fff"
        android:textSize="13sp"
        android:textStyle="bold" />

<EditText
            android:id="@+id/edtSearch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="5dp"
            android:gravity="left"
            android:hint="Name"
            android:maxLines="1"
            android:singleLine="true"
            android:textColorHint="@color/blue"
            android:textSize="13sp"
            android:textStyle="bold" />

16 votes

J'ai aimé cette solution utilisée en combinaison avec un .clearFocus() sur mon EditText (qui était le premier élément focalisable dans le layout, donc clearFocus() ne fonctionnait pas tout seul). L'usurpation du LinearLayout pour qu'il soit focalisable est une solution simple et facile. Bon travail Singh Arjun :)

1 votes

Vous n'aurez besoin que d'utiliser android:focusableInTouchMode="true" parce que le fait de mettre cette valeur à true garantira également que cette vue est focalisable.

0 votes

Incroyable, merci Singh

78voto

sondt87 Points 199

supprimer l'autofocus edittext Android

Cela fonctionne pour moi

Modifier Dans le lien, ils suggèrent d'utiliser LinearLayout, mais une simple View fonctionnera.

<View
    android:id="@+id/focus_thief"
    android:layout_width="1dp"
    android:layout_height="1dp"
    android:focusable="true"
    android:focusableInTouchMode="true" />

Ensuite, si ce "voleur" est placé en haut de la présentation (pour être le premier élément focalisable), les appels à la fonction clearFocus() fonctionnera.

11 votes

Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure les parties essentielles de la réponse ici, et de fournir le lien pour référence.

1 votes

Il n'est pas nécessaire d'ajouter une vue "focus_thief" séparée si vous avez une autre vue dans votre layout qui prendra les paramètres Android:focusable="true" & Android:focusableInTouchMode="true". Ajoutez-les simplement à la vue ci-dessus (si vous en avez une).

33voto

Vous pouvez également inclure Android:windowSoftInputMode="stateAlwaysHidden" (mode d'entrée souple) dans votre section d'action manifeste.

Ceci est équivalent à :

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

mais en mode XML.

Pour info, vous pouvez également masquer le clavier avec des codes :

// hide virtual keyboard
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mYourEditText.getWindowToken(), 0);

0 votes

Je n'ai utilisé que la partie du clavier, merci.

1 votes

Et quand tu voudras le cacher, tu devras faire ceci . stackoverflow.com/a/14327901/1166266

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X