100 votes

Ouverture automatique du clavier au démarrage

J'ai une question relativement simple. J'ai une activité avec beaucoup d'EditText en eux. Lorsque j'ouvre l'activité, elle se concentre automatiquement sur le premier EditText et affiche le clavier virtuel.

Comment puis-je empêcher cela?

212voto

Vikas Patidar Points 19772

Utilisez ces attributs dans votre balise de mise en page dans un fichier XML:

 android:focusable="true"
android:focusableInTouchMode="true"
 

98voto

androidbloke Points 720

Vous pouvez ajouter ceci à votre activité manifeste Android:

 android:windowSoftInputMode="stateHidden|adjustResize"
 

31voto

Elenasys Points 23268

J'ai plusieurs implémentations décrit ici, mais maintenant, j'ai ajouté dans l' AndroidManifest.xml mon Activity la propriété de:

android:windowSoftInputMode="stateAlwaysHidden"

Je pense que c'est la voie facile, même si vous utilisez fragments.

"stateAlwaysHidden" Le clavier est toujours caché lorsque l' l'activité principale de la fenêtre a le focus d'entrée.

11voto

Sid Points 6025

Si vous avez un autre point de vue sur votre activité comme un ListView , vous pouvez aussi faire:

 ListView.requestFocus(); 
 

dans votre onResume () pour obtenir le focus du editText .

Je sais que cette question a été résolue mais fournit juste une solution alternative qui a fonctionné pour moi :)

3voto

Zekitez Points 96

J'ai eu un similaires problème, même lors de la commutation de languettes du clavier surgit automatiquement et est resté en place, avec Android 3.2.1 sur une Tablette. Utilisez la méthode suivante:

public void setEditTextFocus(EditText searchEditText, boolean isFocused)
{
    searchEditText.setCursorVisible(isFocused);
    searchEditText.setFocusable(isFocused);
    searchEditText.setFocusableInTouchMode(isFocused);
    if (isFocused) {
        searchEditText.requestFocus();
    } else {
        InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        inputManager.hideSoftInputFromWindow(searchEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS );
    }
}   

Dans le onCreate() et dans le onPause() de l'activité pour chaque EditText:

setEditTextFocus(myEditText, false);

Pour chaque EditText un OnTouchListener:

    myEditText.setOnTouchListener(new EditText.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            setEditTextFocus(myEditText, true); 
            return false;
        }
    });

Pour chaque EditText dans la OnEditorActionListener:

    myEditText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
                            .......
            setEditTextFocus(myEditText, false); 
            return false;
        }
    });

Et pour chaque EditText dans la layout xml:

            android:imeOptions="actionDone"
            android:inputType="numberDecimal|numberSigned" // Or something else

Il ya probablement plus de l'optimisation de code possible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X