Arrêtez EditText de se concentrer sur le démarrage de l'activité
J'ai un Activity
dans Android, avec deux éléments:
EditText
ListView
Quand mon Activity
commence, le EditText
immédiatement a le focus d'entrée (curseur clignotant). Je ne veux pas de contrôle pour avoir le focus d'entrée au démarrage. J'ai essayé:
EditText.setSelected(false);
Pas de chance. Comment puis-je convaincre les EditText
pour ne pas sélectionner lui-même lors de la Activity
commence?
source d'informationauteur Mark
Vous devez vous connecter pour publier un commentaire.
Excellentes réponses de Luc et Marque cependant un bon exemple de code est manquant. L'ajout de la balise
android:focusableInTouchMode="true"
à<LinearLayout>
comme l'exemple suivant permet de résoudre le problème.Est le véritable problème et que vous ne voulez pas qu'il ait priorité à tous? Ou vous ne voulez pas afficher le clavier virtuel comme un résultat de concentrer la
EditText
? Je ne vois vraiment pas un problème avec leEditText
ayant le focus sur démarrer, mais il est certainement un problème d'avoir la softInput ouverture de la fenêtre lorsque l'utilisateur ne demande pas explicitement de se concentrer sur laEditText
(et d'ouvrir le clavier comme un résultat).Si c'est le problème du clavier virtuel, voir la
AndroidManifest.xml
<activité> élément de la documentation.android:windowSoftInputMode="stateHidden"
- toujours le cacher lors de la saisie de l'activité.ou
android:windowSoftInputMode="stateUnchanged"
- ne pas modifier (par exemple, ne pas montrer si elle n'est pas déjà affiché, mais si elle était ouverte lors de la saisie de l'activité, de la laisser ouverte).Une solution plus simple existe. Définir ces attributs dans votre parent mise en page:
Et maintenant, quand le début de l'activité de cette disposition sera activé par défaut.
Aussi, nous pouvons supprimer le focus de vues enfant au moment de l'exécution (par exemple, après la finition de l'enfant de l'édition) en mettant l'accent sur la page principale de nouveau, comme ceci:
Bon commentaire de Guillaume Perrot:
Vraiment, nous pouvons voir que le
beforeDescendants
définie par défaut dans leViewGroup.initViewGroup()
méthode (Android 2.2.2). Mais pas égal à 0.ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;
Merci à Guillaume.
La seule solution que j'ai trouvé est:
android:focusable="true"
etandroid:focusableInTouchMode="true"
Et la
EditText
de ne pas obtenir le focus après le démarrage de l'activitéLe problème semble venir d'une propriété que je ne peux voir que dans le
XML form
de la mise en page.Assurez-vous de supprimer cette ligne à la fin de la déclaration dans le
EditText
balises XML:Qui devrait donner quelque chose comme ça :
en utilisant les informations fournies par d'autres affiches, j'ai utilisé la solution suivante:
dans la mise en page XML
dans onCreate()
et enfin, dans onResume()
La suite va arrêter edittext de prendre l'accent lors de sa création, mais l'attraper quand vous les touchez.
Si vous définissez focusable à false dans le fichier xml, mais la clé est en java, vous ajoutez ce qui suit auditeur:
Parce que vous êtes de retour faux, c'est à dire de ne pas consommer de l'événement, le comportement de focalisation allons procéder comme d'habitude.
Essayer clearFocus() au lieu de
setSelected(false)
. Chaque vue dans Android dispose à la fois de focalisation et selectability, et je pense que tu veux juste effacer le focus.J'avais essayé serval répondre individuellement, mais l'accent est toujours mis à l'EditText. Je ne réussit à le résoudre à l'aide de deux de la solution ci-dessus ensemble.
( Référence de l'Argent https://stackoverflow.com/a/8639921/15695 )
et supprimer
à EditText
( De référence de floydaddict https://stackoverflow.com/a/9681809 )
Aucune de ces solutions a fonctionné pour moi. La façon dont j'ai corrigé l'autofocus a été:
Solution la plus Simple:
Dans
AndroidManifest
dansActivity
tag utilisationVous pouvez simplement mettre en "focusable" et "peut recevoir le focus en mode tactile" à la valeur true sur la première
TextView
de lalayout
. De cette façon, lorsque l'activité commence à laTextView
seront axées mais , en raison de sa nature, vous ne verrez rien axé sur l'écran et ,bien sûr, il y aura pas clavier affiché...La suite travaillé pour moi dans
Manifest
. Écrire ,J'avais besoin pour objectif clair de tous les domaines de la programmation. J'ai juste ajouté les deux instructions suivantes à ma page principale définition.
Que c'est. Fixe mon problème instantanément. Merci, de l'Argent, pour me pointer dans la bonne direction.
Ajouter
android:windowSoftInputMode="stateAlwaysHidden"
dans l'activité de la balise de laManifest.xml
fichier.Source
Si vous avez un autre point de vue sur votre activité comme un
ListView
vous pouvez également le faire:dans votre
onResume()
à saisir à partir de l'editText
.Je sais que cette question a été répondu, mais simplement de donner une autre solution qui a fonctionné pour moi 🙂
Essayez avant votre premier champ modifiable:
Ajoutez ce qui suit dans
onCreate
méthode:Réponse la plus simple, il suffit d'ajouter cette mère de mise en page du document XML.
Être que je n'aime pas polluer le XML avec quelque chose qui est lié à la fonctionnalité, j'ai créé cette méthode que de façon "transparente" vole la mise au point de la première focusable vue, puis fait en sorte de supprimer lui-même lorsque cela est nécessaire!
La fin, mais peut-être utile. Créer un mannequin EditText en haut de votre mise en page puis appeler
myDummyEditText.requestFocus()
dansonCreate()
Qui semble se comporter comme prévu. Pas besoin de gérer les changements de configuration, etc. J'avais besoin de cela pour une Activité avec une longue TextView (les instructions).
Ouais j'ai fait la même chose - de créer un "crétin" linéaire mise en page qui obtient le point initial. En outre, j'ai mis le 'suivant' accent Id de sorte que l'utilisateur ne peut pas se concentrer plus du tout après avoir fait défiler une fois:
beaucoup de travail juste pour se débarrasser de l'accent sur une vue..
Grâce
Pour moi, ce qui fonctionne sur tous les appareils est ceci:
Viens de mettre ce qu'une vue de l'avant de la problématique ciblée, et c'est tout.
C'est l'idéal et le plus facile solution.J'ai toujours l'utiliser dans mon application.
La chose la plus simple que j'ai fait est de mettre l'accent sur un autre point de vue dans onCreate:
Cet arrêté le clavier souple à venir et il n'y a pas de curseur clignote dans l'EditText.
Écrire cette ligne dans votre Parent la Mise en...
À
onCreate
de votre Activité, il suffit d'ajouter l'utilisationclearFocus()
sur votre EditText élément.Par exemple,
Et si vous voulez détourner le focus à un autre élément, utilisez
requestFocus()
.Par exemple,
Vous pouvez atteindre cet objectif en créant un mannequin
EditText
avec mise en page de la largeur et de la hauteur définie à0dp
et demande de se concentrer à ce point de vue.Ajouter l'extrait de code suivant dans votre mise en page xml:
Assurez-vous de supprimer la ligne
"<requestFocus />"
de laEditText
balise xml.Lorsque votre activité est ouvert, le clavier devient visible, automatiquement, ce qui provoque la focalisation de l'EditText. Vous pouvez désactiver le clavier en écrivant la ligne suivante dans votre activité balise manifest.xml fichier.