44 votes

Android EditText, événement d'affichage et de masquage du clavier souple ?

Est-il possible d'attraper l'événement qui indique que le clavier logiciel a été affiché ou caché pour l'EditText ?

30voto

woodshy Points 2578

Bonjour, j'ai utilisé la solution de rechange suivante :

Dans la mesure où ma vue de contenu est une sous-classe de LinearLayout (il pourrait s'agir de n'importe quelle autre vue ou groupe de vues), j'aurais surchargé la méthode onMeasure de la manière suivante :

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    final int proposedheight = MeasureSpec.getSize(heightMeasureSpec);
    final int actualHeight = getHeight();

    if (actualHeight > proposedheight){
        // Keyboard is shown
    } else {
        // Keyboard is hidden
    }

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

Cette solution de contournement m'a permis de masquer certains contrôles lorsque le clavier est affiché et de les faire réapparaître autrement.

J'espère que cela vous sera utile.

18voto

hackbod Points 55292

En fait, il n'y a pas d'événement à attraper. L'IME se contente d'afficher et de masquer sa fenêtre ; le retour d'information que vous obtenez est le gestionnaire de fenêtres qui provoque le redimensionnement du contenu de votre propre fenêtre si vous l'avez mise en mode redimensionnement.

1voto

single-minded Points 21

Essayez ces méthodes : showSoftInput(View, int, ResultReceiver) y hideSoftInputFromWindow(IBinder, int, ResultReceiver) . Vous pouvez passer outre onReceiveResult(int resultCode, Bundle resultData) méthode de ResultReceiver pour gérer les événements d'affichage et de masquage.

-3voto

Peter Points 12
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if(newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO)
        {//something}
    else {//something}
}

Pour le clavier virtuel, essayez d'écrire une autre constante à partir de la configuration. Par ailleurs, vous devez écrire dans le fichier Manifest.xml, dans la balise activities, l'attribut ! !!!.

<activity    
android:configChanges="keyboardHidden"
>

-6voto

ePeace Points 1114

Vous pouvez capturer cela en écrasant le fichier onConfigurationChanged méthode de votre activité :

@Override
public void onConfigurationChanged(Configuration newConfig) {
   super.onConfigurationChanged(newConfig);

   if(newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
      ((SherlockFragmentActivity)getActivity()).getSupportActionBar().hide();
   }
   else if(newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES){
      ((SherlockFragmentActivity)getActivity()).getSupportActionBar().show();
   }
}

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