62 votes

Comment supprimer le focus d'un seul editText

Double Possible:
Arrêter EditText de gagner de l'accent à l'Activité de démarrage?

Dans mon application j'ai un seul EditText avec quelques TextViews, bouton et un compteur. Mon EditText reçoit le focus puisque c'est le seul focusable vue dans cette activité, je crois. Mon EditText montre avec une bordure orange et le curseur sur le champ.
Maintenant, je voudrais supprimer le focus à partir de ce champ (je ne veux pas le curseur et la frontière montrer). Est-il un moyen de faire cela?
J'ai été en mesure de se concentrer sur le bouton en faisant bouton.seFocusableInTouchMode() et le bouton.requestFocus(). Mais cela met en évidence le bouton et est évidemment pas ce que je veux.

52voto

Kenpachi Points 1578

nouveau à Android .. essayé

 getWindow().getDecorView().clearFocus();
 

ça marche pour moi .. merci de me corriger s'il y a quelque chose qui ne va pas :)

juste pour ajouter .. votre mise en page devrait avoir:

  android:focusable="true"
 android:focusableInTouchMode="true"
 

49voto

MishaZ Points 191

Avez-vous essayé d'utiliser le bon vieux View.clearFocus ()

27voto

Maragues Points 9461

Cochez cette question et la réponse choisie: http://stackoverflow.com/questions/1555109/stop-edittext-from-gaining-focus-at-activity-startup C'est moche mais ça marche, et autant que je sache, il n'y a pas mieux Solution.

3voto

Utilisez le code joint à donner le focus à "quelqu'un d'autre", c'est OK si vous avez un point de vue où vous voulez simplement pour fermer le clavier et la libération de la focus, vous n'avez pas vraiment à qui il est.

Utiliser comme ceci: FocusHelper.releaseFocus(viewToReleaseFocusFrom)

public class FocusHelper {
    public static void releaseFocus(View view) {
        ViewParent parent = view.getParent();
        ViewGroup group = null;
        View child = null;
        while (parent != null) {
            if (parent instanceof ViewGroup) {
                group = (ViewGroup) parent;
                for (int i = 0; i < group.getChildCount(); i++) {
                    child = group.getChildAt(i);
                    if(child != view && child.isFocusable())
                        child.requestFocus();
                }
            }
            parent = parent.getParent();
        }
    }
}

Doc: La méthode de traverse de l'enfant et la vue de l'arbre et regarde pour le premier enfant à donner le focus.

Edit: Vous pouvez également utiliser l'API pour cela:

View focusableView = v.focusSearch(View.FOCUS_DOWN);
if(focusableView != null) focusableView.requestFocus();

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