y a-t-il un moyen dans Android d'obtenir la hauteur du clavier virtuel d'un appareil Android en temps d'exécution? En fait, je veux afficher la zone de texte au-dessus du clavier.
Oui, vous pouvez, avec l'aide de Viewtree Observer et de Listener Global Layener, essayez les étapes ci-dessous.
maintenant, chaque fois que le clavier virtuel est affiché, Android redimensionnera votre écran et vous recevrez un appel sur votre auditeur. La seule chose que vous ayez maintenant à faire est de calculer la différence de hauteur entre votre vue racine après redimensionnement et la taille originale. Si la différence est supérieure à 150, considérez cela comme un clavier gonflé.
Ci-dessous un exemple de code
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){
public void onGlobalLayout(){
int heightDiff = root.getRootView().getHeight()- root.getHeight();
// IF height diff is more then 150, consider keyboard as visible.
}
});
Cordialement, Techfist
Pour résoudre ce problème, j'ai écrit un keyboardHeightProvider qui permet de calculer la hauteur d'un clavier logiciel flottant. L'activité peut être définie sur adjustNone ou adjustPan dans le fichier AndroidManifest.xml.
https://github.com/siebeprojects/samples-keyboardheight
Siebe
J'ai essayé de nombreuses méthodes suggérées pour cela, mais aucune ne semblait fonctionner pour Android SDL. Je pense que c'est soit parce que l'affichage SDL est "plein écran", soit parce qu'il se trouve dans un "AbsoluteLayout" et que, par conséquent, la hauteur de la "Vue" ne change jamais réellement. Cette méthode a fonctionné pour moi:
Obtenir les dimensions du clavier virtuel
mRootWindow = getWindow();
mRootView = mRootWindow.getDecorView().findViewById(Android.R.id.content);
mRootView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout(){
Rect r = new Rect();
View view = mRootWindow.getDecorView();
view.getWindowVisibleDisplayFrame(r);
// r.left, r.top, r.right, r.bottom
}
});
mettre la zone de texte comme parent en bas.
Android:layout_alignParentBottom="true"
et dans le fichier manifeste, effectuez la saisie logicielle adjustresize
Android:windowSoftInputMode="adjustResize"
alors la zone de texte se déplacera vers le haut lorsque le clavier apparaîtra.
Vous ne pouvez pas dire. Non, vraiment: vous ne pouvez tout simplement pas dire.
Le clavier n'a pas besoin d'être de forme particulière. Il ne doit pas nécessairement être placé au bas de l'écran ( plusieurs du le plus populaire options ne sont pas ), il n'est pas obligé de conserver sa valeur actuelle. taille lorsque vous modifiez les champs de texte (presque aucun ne dépend des drapeaux). Il n'est même pas nécessaire que ce soit rectangulaire . Il est également possible que vous preniez simplement le écran complet .
(copie de ma réponse à une question similaire, indiquant les dimensions du clavier virtuel } _)
J'ai créé un projet de bibliothèque pour obtenir la hauteur de clavier Android, même lorsque les activités n'utilisent pas le mode de saisie adjustResize
.
Ma solution est la combinaison de toutes les solutions ci-dessus. Cette solution est également hacky mais résolvez le problème (du moins pour moi).
Android:windowSoftInputMode="adjustResize"
dans la balise activity dans le manifeste, comme le suggère @bill.Maintenant, l'histoire principale est en onGlobalLayout()
. Là, je calcule la différence entre l’axe y de la vue temporaire et la hauteur de la vue racine
final View view = findViewById(R.id.base);
view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int rootViewHeight = view.getRootView().getHeight();
View tv = findViewById(R.id.temp_view);
int location[] = new int[2];
tv.getLocationOnScreen(location);
int height = (int) (location[1] + tv.getMeasuredHeight());
deff = rootViewHeight - height;
// deff is the height of soft keyboard
}
});
Quoi qu'il en soit, pour résoudre le problème de @ zeeshan0026, un seul indicateur dans le manifeste Android:windowSoftInputMode="adjustResize"
suffit.
Je l'ai utilisé pour obtenir la hauteur du clavier par programme dans Android et l'ai testé, veuillez essayer cette fois
myLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
Rect r = new Rect();
parent.getWindowVisibleDisplayFrame(r);
int screenHeight = parent.getRootView().getHeight();
int heightDifference = screenHeight - (r.bottom - r.top);
Log.d("Keyboard Size", "Size: " + heightDifference);
//boolean visible = heightDiff > screenHeight / 3;
}
});
Je vous remercie.
Ne regarde plus! Je cherchais une solution à ce problème depuis longtemps. Après des jours d’essais sur tous les trucs suggérés sur SOF, j’ai trouvé la solution parfaite qui fonctionne réellement.
Ce projet GitHub le démontre de la meilleure façon possible: https://github.com/siebeprojects/samples-keyboardheight
S'amuser!