Android: désactiver le clavier logiciel à tous EditTexts

Je travaille sur une boîte de dialogue sur Android avec quelques EditTexts. 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?

21
demandé sur Yaniv 2011-04-27 15:20:06

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;
    }
}
22
répondu jkhouw1 2016-12-31 06:17:57

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.

30
répondu zeratul021 2011-07-07 16:34:57

Essayez ceci..

edittext.setInputType(InputType.TYPE_NULL);      
if (android.os.Build.VERSION.SDK_INT >= 11)   
{  
    edittext.setRawInputType(InputType.TYPE_CLASS_TEXT);  
    edittext.setTextIsSelectable(true);  
}
20
répondu ASP 2013-05-10 10:27:43

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.

5
répondu 43matthew 2012-10-18 03:34:29

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.

4
répondu Aswin Kumar 2012-07-22 07:10:30

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)
1
répondu VenoM 2015-12-18 16:24:01

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.

1
répondu Christian d'Heureuse 2016-04-13 22:52:19
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edSearch.getWindowToken(), 0);
0
répondu 2011-04-27 11:22:38

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); 
0
répondu Khurram Shehzad 2012-12-07 10:34:09

Mettez ceci dans la méthode Oncreate

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
0
répondu Rollyng 2013-03-20 18:12:25

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);
0
répondu Tafari 2013-05-27 18:52:55

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" />
0
répondu itzhar 2015-05-18 11:39:32

, Vous pouvez le faire:

textView.setOnClickListener(null);

Il désactivera le clavier dans textView et le clic ne fonctionnera plus.

0
répondu z_inx 2015-10-21 16:54:27