Android: désactiver le clavier logiciel à tous EditTexts
Je travaille sur une boîte de dialogue sur Android avec quelques EditText
s.
J'ai mis cette ligne au onCreate()
afin de désactiver le clavier logiciel:
Keypad.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Le problème est que cela ne fonctionne que lorsque la boîte de dialogue apparaît et ne fait rien.
Lorsque je passe au EditText
suivant, le clavier apparaît et ne descend pas.
Quelqu'un a une idée de comment résoudre ce problème?
13 réponses
Créez votre propre classe qui étend EditText
et remplace le onCheckIsTextEditor()
:
public class NoImeEditText extends EditText {
public NoImeEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onCheckIsTextEditor() {
return false;
}
}
Si vous regardez l'implémentation de la méthode onCheckIsTextEditor () (dans TextView), cela ressemble à ceci:
@Override
public boolean onCheckIsTextEditor() {
return mInputType != EditorInfo.TYPE_NULL;
}
Cela signifie que vous n'avez pas besoin de sous-classe, vous pouvez simplement:
((EditText) findViewById(R.id.editText1)).setInputType(InputType.TYPE_NULL);
J'ai essayé de définir android: inputType= "none" dans layout xml mais cela n'a pas fonctionné pour moi, donc je l'ai fait par programme.
Essayez ceci..
edittext.setInputType(InputType.TYPE_NULL);
if (android.os.Build.VERSION.SDK_INT >= 11)
{
edittext.setRawInputType(InputType.TYPE_CLASS_TEXT);
edittext.setTextIsSelectable(true);
}
J'ai cherché des solutions à cela toute la journée, et je suis tombé sur cette approche. Je le mets ici parce qu'il semble répondre parfaitement à cette question.
EditText et = ... // your EditText
et.setKeyListener(null) //makes the EditText non-editable so, it acts like a TextView.
Pas besoin de sous-classe. La principale différence entre ceci et rendre votre EditText Non focalisable, est que le EditText a toujours son propre curseur-vous pouvez sélectionner du texte,etc. Tout ce qu'il fait est de supprimer L'IME de faire apparaître son propre clavier logiciel.
Cela fait un certain temps depuis ce post, mais voici une méthode simple qui a fonctionné pour moi: dans le xml, dans les propriétés EditText
, faites: android:focusable="false"
. Maintenant, le clavier ne s'affichera pas même si l'utilisateur clique dessus. Ceci est utile si vous fournissez votre propre clavier.
Sachez qu'il est trop tard, mais avez-vous essayé le paramètre suivant pour EditText dans votre mise en page ?
android:inputType="none"
Mise à jour
Utilisation,
editText.setInputType(InputType.TYPE_NULL)
editText.setFocusable(false)
Appelez TextView.setShowSoftInputOnFocus(false)
. Cette méthode est documentée depuis le niveau API 21, mais elle est déjà là depuis le niveau API 16 (elle est juste cachée de JavaDoc). Je l'utilise avec API Niveau 16 dans un AlertDialog en combinaison avec dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
.
Au niveau de L'API 14, Il existe une méthode cachée setSoftInputShownOnFocus()
qui semble avoir le même but,mais je ne l'ai pas testé.
L'avantage par rapport à InputType.TYPE_NULL
est que tous les types d'entrée normaux peuvent être utilisés (par exemple pour la saisie de mot de passe) et que l'événement tactile positionne le curseur sur le bon endroit dans le texte.
Afin de désactiver le fichier xml du clavier D'entrée souple ANDROID n'aide pas dans mon cas l'appel de la méthode setInputType sur L'objet EditText dans le fichier java fonctionne très bien. voici le code.
EditTextInputObj = (EditText) findViewById(R.id.EditTextInput);
EditTextInputObj.setInputType(InputType.TYPE_NULL);
Mettez ceci dans la méthode Oncreate
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Si vous placez les textViews dans le groupe de vues, vous pouvez faire en sorte que la vue obtienne le focus avant l'un de ses descendants en utilisant ceci:
view.setDescendantFocusability(view.FOCUS_BLOCK_DESCENDANTS);
Par set EditText focusable - > false, Le clavier ne s'ouvre pas lorsque vous cliquez sur
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false" />
, Vous pouvez le faire:
textView.setOnClickListener(null);
Il désactivera le clavier dans textView et le clic ne fonctionnera plus.