J'ai un Activity
sous Android, avec deux éléments:
EditText
ListView
Lorsque mon Activity
démarre, le a EditText
immédiatement le focus d'entrée (curseur clignotant). Je ne veux aucun contrôle pour avoir le focus d'entrée au démarrage. J'ai essayé:
EditText.setSelected(false);
EditText.setFocusable(false);
Pas de chance. Comment puis-je convaincre le EditText
de ne pas se sélectionner lui-même au Activity
démarrage?
android:focusableInTouchMode="true"
!android:focusableInTouchMode="true"
couvreandroid:focusable="true"
+ un peu plus, donc dans ce cas, ilandroid:focusable="true"
n'est pas nécessaire et peut être supprimé. De plus, la vue factice peut être une vue au lieu d'une présentation linéaire. Cela économise de la puissance de traitement + vous évite certains avertissements. Ainsi, ma recommandation remplace le point de vue factice par<View android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"/>
Le problème réel est-il que vous ne voulez tout simplement pas qu'il se concentre du tout? Ou vous ne voulez pas qu'il montre le clavier virtuel suite à la mise au point du
EditText
? Je ne vois pas vraiment de problème avec leEditText
focus sur le démarrage, mais c'est certainement un problème d'avoir la fenêtre softInput ouverte lorsque l'utilisateur n'a pas explicitement demandé de se concentrer sur leEditText
(et d'ouvrir le clavier en conséquence).Si c'est le problème du clavier virtuel, consultez la documentation de l'
AndroidManifest.xml
élément <activité> .android:windowSoftInputMode="stateHidden"
- cachez-le toujours lorsque vous entrez dans l'activité.ou
android:windowSoftInputMode="stateUnchanged"
- ne le modifiez pas (par exemple, ne le montrez pas s'il n'est pas déjà affiché, mais s'il était ouvert lors de l'entrée dans l'activité, laissez-le ouvert).la source
EditText
d'obtenir le focus. Il indique en fait clairement que c'est ainsi que vous empêchez le clavier logiciel IME de s'ouvrir automatiquement sur le focus; car il est plus probable que le plus gros problème soit le clavier virtuel qui surgit de manière inattendue, pas la mise au point elle-même. Si votre problème est lié à laEditText
concentration réelle, utilisez la réponse de quelqu'un d'autre.Une solution plus simple existe. Définissez ces attributs dans votre disposition parent:
Et maintenant, lorsque l'activité démarre, cette mise en page principale sera mise en évidence par défaut.
De plus, nous pouvons supprimer le focus des vues enfant lors de l'exécution (par exemple, après avoir terminé l'édition enfant) en redonnant le focus à la disposition principale, comme ceci:
Bon commentaire de Guillaume Perrot :
Vraiment, nous pouvons voir que l'
beforeDescendants
ensemble est défini par défaut dans laViewGroup.initViewGroup()
méthode (Android 2.2.2). Mais pas égal à 0.ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;
Merci à Guillaume.
la source
La seule solution que j'ai trouvée est:
android:focusable="true"
etandroid:focusableInTouchMode="true"
Et ils
EditText
n'obtiendront pas l'attention après le début de l'activitéla source
Le problème semble provenir d'une propriété que je ne peux voir que dans
XML form
la disposition.Assurez-vous de supprimer cette ligne à la fin de la déclaration dans les
EditText
balises XML:Cela devrait donner quelque chose comme ça:
la source
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 source
Essayez clearFocus () au lieu de
setSelected(false)
. Chaque vue dans Android a à la fois une focalisation et une sélection, et je pense que vous souhaitez simplement effacer la mise au point.la source
myEditText.clearFocus(); myDummyLinearLayout.requestFocus();
leonResume
de l'activité. Cela a garanti que le EditText ne gardait pas le focus lorsque le téléphone était tourné.Les éléments suivants empêcheront edittext de prendre le focus lors de sa création, mais saisissez-le lorsque vous les toucherez.
Vous définissez donc focusable sur false dans le xml, mais la clé se trouve dans le java, auquel vous ajoutez l'écouteur suivant:
Parce que vous retournez faux, c'est-à-dire que vous ne consommez pas l'événement, le comportement de mise au point se déroulera comme d'habitude.
la source
J'avais essayé plusieurs réponses individuellement mais le focus est toujours sur EditText. Je n'ai réussi à le résoudre qu'en utilisant ensemble deux des solutions ci-dessous.
(Référence de Silver https://stackoverflow.com/a/8639921/15695 )
et retirer
à EditText
(Référence de floydaddict https://stackoverflow.com/a/9681809 )
la source
Réponse tardive mais la plus simple, ajoutez simplement ceci dans la disposition parent du XML.
Votez si cela vous a aidé! Happy Coding :)
la source
Aucune de ces solutions n'a fonctionné pour moi. La façon dont je corrige la mise au point automatique était:
la source
Solution simple: utilisation in
AndroidManifest
inActivity
tagla source
Vous pouvez simplement mettre « focusable » et « focalisable en mode tactile » à la valeur réelle sur le premier
TextView
dulayout
. De cette façon, lorsque l'activité commencera, leTextView
sera concentré mais, en raison de sa nature, vous ne verrez rien de concentré sur l'écran et, bien sûr, aucun clavier ne sera affiché ...la source
Ce qui suit a fonctionné pour moi
Manifest
. Écrire ,la source
Je devais effacer le focus de tous les domaines par programme. Je viens d'ajouter les deux déclarations suivantes à ma définition de mise en page principale.
C'est ça. Correction de mon problème instantanément. Merci, Silver, de m'avoir pointé dans la bonne direction.
la source
Ajoutez
android:windowSoftInputMode="stateAlwaysHidden"
la balise d'activité duManifest.xml
fichier.La source
la source
Si vous avez une autre vision de votre activité comme un
ListView
, vous pouvez également faire:dans votre
onResume()
pour vous concentrer sur leeditText
.Je sais que cette question a été répondue, mais fournit simplement une solution alternative qui a fonctionné pour moi :)
la source
Essayez ceci avant votre premier champ modifiable:
la source
Ajoutez la
onCreate
méthode suivante:la source
Étant donné que je n'aime pas polluer le XML avec quelque chose qui est lié à la fonctionnalité, j'ai créé cette méthode qui "de manière transparente" vole le focus de la première vue focalisable et s'assure ensuite de se retirer si nécessaire!
la source
Tard, mais peut-être utile. Créer un EditText factice en haut de votre mise en page puis appelez
myDummyEditText.requestFocus()
auonCreate()
Cela semble se comporter comme je m'y attendais. Pas besoin de gérer les changements de configuration, etc. J'en avais besoin pour une activité avec une longue TextView (instructions).
la source
Écrivez cette ligne dans votre disposition parentale ...
la source
Oui, j'ai fait la même chose - créer une disposition linéaire «factice» qui se concentre initialement. De plus, j'ai défini les ID de focus `` suivant '' pour que l'utilisateur ne puisse plus le concentrer après avoir fait défiler une fois:
beaucoup de travail juste pour se débarrasser de se concentrer sur une vue ..
Merci
la source
Pour moi, ce qui a fonctionné sur tous les appareils est le suivant:
Il suffit de mettre cela en vue avant la vue focalisée problématique, et c'est tout.
la source
La chose la plus simple que j'ai faite est de mettre l'accent sur une autre vue dans onCreate:
Cela a empêché le clavier logiciel d'apparaître et aucun curseur ne clignotait dans EditText.
la source
C'est la solution parfaite et la plus simple, je l'utilise toujours dans mon application.
la source
la source
Écrivez ce code dans le
Manifest
fichierActivity
où vous ne souhaitez pas ouvrir le clavier.Fichier manifeste:
la source
À
onCreate
votre activité, ajoutez simplement une utilisationclearFocus()
sur votre élément EditText. Par exemple,Et si vous souhaitez détourner le focus vers un autre élément, utilisez-
requestFocus()
le. Par exemple,la source
J'utilise le code suivant pour empêcher un EditText de voler le focus lorsque mon bouton est enfoncé.
Fondamentalement, masquez le texte modifié, puis affichez-le à nouveau. Cela fonctionne pour moi car le EditText n'est pas en vue, donc peu importe qu'il s'affiche.
Vous pouvez essayer de le cacher et de le montrer successivement pour voir si cela l'aide à perdre le focus.
la source