Je voudrais modifier la disposition selon que le clavier virtuel est affiché ou non. J'ai recherché l'API et divers blogs mais je ne trouve rien d'utile.
C'est possible?
Merci!
android
events
android-softkeyboard
Sander Versluys
la source
la source
Réponses:
Remarque
Vous devez gérer vous-même les modifications de configuration.
http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange
Échantillon:
Ensuite, modifiez simplement la visibilité de certaines vues, mettez à jour un champ et modifiez votre fichier de mise en page.
la source
newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO
~ ChrisCe n'est peut-être pas la solution la plus efficace. Mais cela a fonctionné pour moi à chaque fois ... J'appelle cette fonction partout où j'ai besoin d'écouter le softKeyboard.
Remarque: Cette approche entraînera des problèmes si l'utilisateur utilise un clavier flottant.
la source
android:windowSoftInputMode="adjustPan"
ouadjustResize
avec une fenêtre plein écran, car la disposition n'est jamais redimensionnée.Si vous souhaitez gérer l'affichage / masquage de la fenêtre du clavier IMM (virtuel) de votre activité, vous devrez sous-classer votre disposition et remplacer la méthode onMesure (afin de pouvoir déterminer la largeur mesurée et la hauteur mesurée de votre disposition). Après cela, définissez la disposition sous-classée comme vue principale pour votre activité par setContentView (). Vous pourrez désormais gérer les événements de la fenêtre d'affichage / masquage IMM. Si cela semble compliqué, ce n'est pas vraiment ça. Voici le code:
main.xml
Maintenant, dans votre activité, déclarez la sous-classe de votre mise en page (main.xml)
Vous pouvez voir dans le code que nous gonflons la disposition pour notre constructeur d'activité dans la sous-classe
Et maintenant, définissez simplement la vue du contenu de la disposition sous-classée pour notre activité.
la source
android:windowSoftInputMode="adjustPan"
ouadjustResize
avec une fenêtre plein écran, car la disposition n'est jamais redimensionnée.J'ai fait comme ça:
Ajouter une
OnKeyboardVisibilityListener
interface.HomeActivity.java :
J'espère que cela vous aidera.
la source
Sur la base du code de Nebojsa Tomcic, j'ai développé la sous-classe RelativeLayout suivante:
Cela fonctionne très bien ... Mark, que cette solution ne fonctionnera que lorsque le mode d'entrée douce de votre activité est défini sur "WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE"
la source
android:windowSoftInputMode="adjustPan"
ouadjustResize
avec une fenêtre plein écran, car la disposition n'est jamais redimensionnée.Comme la réponse de @ amalBit, enregistrez un auditeur dans la mise en page globale et calculez la différence entre le fond visible de dectorView et le fond proposé, si la différence est supérieure à une certaine valeur (hauteur devinée de l'IME), nous pensons que l'IME est en hausse:
le seuil de hauteur 100 est la hauteur minimale supposée d'IME.
Cela fonctionne à la fois pour adjustPan et adjustResize.
la source
La solution de Nebojsa a presque fonctionné pour moi. Lorsque j'ai cliqué à l'intérieur d'un EditText sur plusieurs lignes, il savait que le clavier était affiché, mais quand j'ai commencé à taper à l'intérieur de EditText, actualHeight et proposeHeight étaient toujours les mêmes, donc il ne savait pas qu'ils étaient toujours affichés. J'ai fait une légère modification pour stocker la hauteur maximale et cela fonctionne bien. Voici la sous-classe révisée:
la source
Je ne sais pas si quelqu'un poste cela. Trouvé cette solution simple à utiliser! . La classe SoftKeyboard se trouve sur gist.github.com . Mais alors que le rappel clavier / masqué des événements nous avons besoin d'un gestionnaire pour faire correctement les choses sur l'interface utilisateur:
la source
Je résous ce problème en remplaçant onKeyPreIme (int keyCode, événement KeyEvent) dans mon EditText personnalisé.
la source
J'ai une sorte de hack pour faire ça. Bien qu'il ne semble pas y avoir de moyen de détecter quand le clavier virtuel est affiché ou masqué, vous pouvez en fait détecter quand il est sur le point d'être affiché ou masqué en définissant un
OnFocusChangeListener
sur leEditText
que vous écoutez.REMARQUE: Une chose à savoir avec ce hack est que ce rappel est déclenché immédiatement lorsque le
EditText
gain ou la perte de focus. Cela se déclenchera juste avant que le clavier virtuel ne s'affiche ou ne se cache. La meilleure façon que j'ai trouvée de faire quelque chose après que le clavier s'affiche ou se cache est d'utiliser unHandler
et de retarder quelque chose ~ 400 ms, comme ceci:la source
OnFocusChangeListener
indique uniquement si leEditText
focus a été activé après le changement d'état. Mais leIME
peut être caché quandEditText
a focus, comment détecter ce cas?Sander, je crois que vous essayez de montrer la vue bloquée par le clavier virtuel. Essayez ceci http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html .
la source
J'ai résolu le problème du codage arrière de la visualisation de texte sur une seule ligne.
la source
Vous pouvez également vérifier le rembourrage inférieur du premier enfant DecorView. Il sera réglé sur une valeur non nulle lorsque le clavier sera affiché.
la source
Masquer | Afficher les événements pour le clavier peut être écouté via un simple hack dans OnGlobalLayoutListener:
Ici, activityRootView est la vue racine de votre activité.
la source
en utilisant viewTreeObserver pour obtenir facilement l'événement clavier.
** layout_parent est votre point de vue comme
edit_text.parent
la source
La réponse de Nebojsa Tomcic ne m'a pas été utile. J'ai
RelativeLayout
avecTextView
et à l'AutoCompleteTextView
intérieur. Je dois faire défilerTextView
vers le bas lorsque le clavier est affiché et lorsqu'il est masqué. Pour ce faire, j'ai remplacé laonLayout
méthode et cela fonctionne bien pour moi.la source