Détecter lorsque le clavier est visible ou caché, pas de travail

Je suis en cours d'exécution dans certains problèmes d'essayer de détecter si le logiciel clavier est visible ou non.

Je recherche une solution (SI inclus), mais sans succès.
Ce qui est bizarre, c'est que je l'ai fait dans la même application en vérifiant si la taille de la fenêtre a changé, comme ceci:

final View activityRootView = findViewById(R.id.tlFull); 
//tlFull is the activity table layout
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() 
{
    public void onGlobalLayout() 
    {
        int heightDiff = activityRootView.getRootView()
                .getHeight() - activityRootView.getHeight();
        if (heightDiff > 100) 
        {
           //did some stuff here
        } 
        else 
        {
           //and here
        }
    }
});

et en ajoutant
android:windowSoftInputMode="adjustResize" dans le fichier manifest.

Maintenant, je suis en train de faire la même chose sur une activité de connexion, mais il semble que, pour quelque raison heightDiff est toujours 38 donc, cela ne fonctionne plus. Même s'applique pour chaque méthode trouvée sur DONC qui utilise la même approche.

J'ai aussi essayé cela, mais il retourne toujours true.

final View activityRootView = findViewById(R.id.tlFull);
activityRootView.getViewTreeObserver()
        .addOnGlobalLayoutListener(new OnGlobalLayoutListener() 
{
      @Override
      public void onGlobalLayout() 
      {
          if (getResources().getConfiguration()
                            .keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) 
          {}
          else
          {}
      }
 });

Aussi, puisque je ne suis pas à l'aide de fragments je ne peux pas utiliser ce:

InputMethodManager imm = (InputMethodManager) getActivity()
            .getSystemService(Context.INPUT_METHOD_SERVICE);

if (imm.isAcceptingText()) 
{} 
else 
{}

J'ai aussi essayé une approche différente.
Je fais ce que je veux faire dans la etPass (l'édition de texte qui déclenche le clavier) onClick méthode:

etPass.setOnClickListener(new OnClickListener() 
{
    public void onClick(View viewIn) 
    {
    ivImageView.setVisibility(View.GONE);
    }
});

Malheureusement, même si le clavier affiche l'affichage de l'image n'est pas toujours disparaître sur le robinet d'abord je dois donc me touchez-le à nouveau.

Le deuxième problème est que j'ai essayé de montrer la iv à nouveau dans la onBackPressed() la méthode. Cela fonctionne, mais pas la façon dont il le devrait.

Quand j'ai touché le bouton de retour, le clavier disparaît, mais je dois appuyez de nouveau pour rendre l'image visible. (J'ai essayé la solution proposée ici, mais il ne fonctionne pas: EditText avec clavier et le bouton "Retour" )

Aussi, ce qui empêche l'application de clôture sur onBackPressed().

Aucune idée sur comment résoudre ce problème et pourquoi que la diff est toujours le même?
Je ne pouvais pas trouver une meilleure solution pour cela et maintenant j'ai peur que le même problème peut apparaître sur le vieux activité dans l'avenir (même si il semble bien fonctionner dans les tests)

InformationsquelleAutor daydr3am3r | 2014-03-31