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é?

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"

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"

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()


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


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>

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().


0
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

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"


-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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.