Comment supprimer la mise au point automatique / la fenêtre contextuelle du clavier d'un champ lorsque l'écran apparaît?

105

J'ai un écran où le premier champ est un EditText, et il gagne le focus au démarrage, affiche également le type d'entrée numérique, ce qui est très ennuyeux

Comment puis-je m'assurer qu'au démarrage de l'activité, la mise au point n'est pas acquise et / ou le panneau de saisie n'est pas relevé?

Pentium10
la source

Réponses:

157
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);

ou

définir la propriété d'activité dans le fichier manifeste comme ci-dessous dans la balise d'application

android:windowSoftInputMode="stateHidden"
Mitul Nakum
la source
La définition de android: windowSoftInputMode dans le fichier AndroidManifest.xml peut être OU avec d'autres valeurs. Le mode implique généralement des valeurs uniques, mais dans ce cas, la valeur est une collection d'indicateurs. Description des valeurs:Formats: flag Values: adjustNothing, adjustPan, adjustResize, adjustUnspecified, stateAlwaysHidden, stateAlwaysVisible, stateHidden, stateUnchanged, stateUnspecified, stateVisible Specify the default soft-input mode for the main window of this activity. A value besides "unspecified" here overrides any value in the theme.
Jeff Muir
145

Accédez au fichier manifeste de votre application et écrivez cette ligne pour cette activité pour laquelle vous souhaitez désactiver la fenêtre contextuelle automatique du clavier.

android:windowSoftInputMode="stateHidden"
sm.euro
la source
Cela n'a pas fonctionné pour moi. Je l'ai mis dans activity_main.xml. Cela a parfaitement fonctionné lorsque je l'ai mis dans onCreate (). getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
glez
20

Pour ne pas afficher le clavier par programme, mais que le widget par défaut reçoit toujours l'appel de focus:

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

dans onResume()

danmux
la source
11
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

appeler la méthode ci-dessus dans onCreate () .Il empêche softKeyboard de s'afficher à moins que l'utilisateur sélectionne EditText partapping or clicking.

ou ajoutez simplement une android:windowSoftInputMode="stateHidden"balise d'activité dansManifest.xml

Xar-e-ahmer Khan
la source
10

C'est généralement un désordre. La première chose que j'essaye est d'essayer de voler la mise au point avec une autre vue via. Vous devez également avoir le focusable et focusableInTouchMode.

<TextView
  ...
  android:focusable="true"
  android:focusableInTouchMode="true">

    <requestFocus/>
</TextView>
urSus
la source
Cela marche. Je pense que c'est une approche plus propre, mais cela dépend aussi de vos conditions. J'accepte celui-ci.
JaydeepW
5

Ayez un autre focus de capture de vue. Par défaut, la première vue focalisable obtiendra le focus lorsqu'une mise en page est gonflée. Vous pouvez demander le focus sur une vue différente via XML:

<TextView
    android:layout_width="wrap_parent"
    android:layout_height="wrap_content"
    android:text="Some other view">

    <requestFocus />
</TextView>

Cela fonctionne pour n'importe quelle vue.

Si vous souhaitez le faire par programme, vous pouvez utiliser view.requestFocus().

Jason Robinson
la source
0
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}
Paul Liang
la source
3
Bienvenue dans StackOverflow! Ce n'est pas comme les autres forums, si vous souhaitez modifier votre réponse, cliquez simplement sur le editlien et effectuez vos modifications. Et essayez de formater votre code en sélectionnant votre code et en utilisant le bouton Exemple de code {}ou en appuyant sur Ctrl+K.
Peter Lang
0

L'ajout android:windowSoftInputMode="stateHidden"à votre activité dans le manifeste ne masque le clavier que lorsque vous lancez l'activité, ou comme le dit Google

Lorsque l'utilisateur navigue de manière affirmative vers l'activité, plutôt que d'y revenir en raison de la sortie d'une autre activité

Pour masquer le clavier également lorsque l'utilisateur appuie sur le bouton de retour et revient à votre activité à partir d'une autre activité, utilisez android:windowSoftInputMode="stateAlwaysHidden"

Devansh Maurya
la source
-1

Je n'ai pas essayé cela et je ne suis pas à proximité de mon ordinateur de programmation, mais je soupçonnerais que l'envoi programmatique du focus à la vue parent ou quelque chose de cette nature pourrait faire l'affaire - c'est plus probablement une solution de contournement qu'une solution, mais encore une fois pas capable de le tester juste une pensée

Ben
la source
1
J'ai essayé mais ne fonctionne pas. J'ai appelé .requestFocus();sur un bouton, et toujours les fenêtres contextuelles du clavier.
Pentium
pensées peuvent être ajoutées en tant que commentaires
Alberto M