¿Cómo puedo detectar si el teclado del software está visible en el dispositivo Android o no?
¿Hay alguna forma en Android de detectar si el teclado del software (también conocido como "software") está visible en la pantalla?
Esto funciona para mí. Quizás esta sea siempre la mejor manera para todas las versiones .
Sería efectivo crear una propiedad de visibilidad del teclado y observar que estos cambios se retrasan porque el método onGlobalLayout llama muchas veces. También es bueno comprobar la rotación del dispositivo y windowSoftInputMode
no lo es adjustNothing
.
boolean isKeyboardShowing = false;
void onKeyboardVisibilityChanged(boolean opened) {
print("keyboard " + opened);
}
// ContentView is the root view of the layout of this activity/fragment
contentView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
contentView.getWindowVisibleDisplayFrame(r);
int screenHeight = contentView.getRootView().getHeight();
// r.bottom is the position above soft keypad or device button.
// if keypad is shown, the r.bottom is smaller than that before.
int keypadHeight = screenHeight - r.bottom;
Log.d(TAG, "keypadHeight = " + keypadHeight);
if (keypadHeight > screenHeight * 0.15) { // 0.15 ratio is perhaps enough to determine keypad height.
// keyboard is opened
if (!isKeyboardShowing) {
isKeyboardShowing = true;
onKeyboardVisibilityChanged(true);
}
}
else {
// keyboard is closed
if (isKeyboardShowing) {
isKeyboardShowing = false;
onKeyboardVisibilityChanged(false);
}
}
}
});
prueba esto:
InputMethodManager imm = (InputMethodManager) getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isAcceptingText()) {
writeToLog("Software Keyboard was shown");
} else {
writeToLog("Software Keyboard was not shown");
}
Creé una clase simple que se puede usar para esto: https://github.com/ravindu1024/android-keyboardlistener . Simplemente cópielo en su proyecto y utilícelo de la siguiente manera:
KeyboardUtils.addKeyboardToggleListener(this, new KeyboardUtils.SoftKeyboardToggleListener()
{
@Override
public void onToggleSoftKeyboard(boolean isVisible)
{
Log.d("keyboard", "keyboard visible: "+isVisible);
}
});
No hay una forma directa: consulte http://groups.google.com/group/android-platform/browse_thread/thread/1728f26f2334c060/5e4910f0d9eb898a donde respondió Dianne Hackborn del equipo de Android. Sin embargo, puede detectarlo indirectamente comprobando si el tamaño de la ventana cambió en #onMeasure. Consulte ¿Cómo comprobar la visibilidad del teclado del software en Android? .