¿Cómo verificar la visibilidad del teclado de software en Android?

En algunos casos, debemos determinar si el teclado se muestra o no en una determinada actividad. En este ejemplo, podemos ver cómo verificar la presencia de un teclado virtual en Android. Con el lanzamiento de Android 11 preview 2 y aquí, ¡parece que finalmente se está implementando el comportamiento de la plataforma para escuchar los cambios del teclado! Esto parece usar WindowInsets detrás del capó, por lo que lo más probable es que se adapte a versiones anteriores de Android.

Entonces, ¿cuál es el problema con la oferta actual?

Desea saber si el teclado de Android está abierto en este momento. ¿No es sencillo? 

No, no lo hace. El teclado de Android es una fantástica pieza de diseño que administra la mayor parte de su visibilidad internamente, confiando en la entrada del usuario en lugar de la entrada del desarrollador. Cuando funciona, es un sistema fantástico… hasta que deja de funcionar. Debido a que Android no brinda un medio directo para identificar si el teclado está abierto, tendremos que ser un poco creativos. La clase View incluye un método útil llamado getWindowVisibleDisplayFrame que devuelve un rectángulo que contiene la sección de la vista que es visible para el usuario. Esto incluye decoraciones del sistema que se pueden colocar encima de la vista (como el teclado).

Kotlin

val keyboardVisible = Rect()
someRandomView.getWindowVisibleDisplayFrame(keyboardVisible)

La altura visible se puede calcular a partir del rectángulo visible. Podemos saber si el teclado se ha dibujado encima de la imagen comparando la altura visible con la altura real de la vista. (pista: esto también se puede usar para determinar la altura del teclado). Luego haga esto:

Java

if (oldAltitude < newAltitude) {
    if (keyboardVisibleState) {
            keyboardVisibleState = false;
            stopNav();
    if (keyboardChecker != null) {
            keyboardChecker.onKeyboardHidden();
        }
    } else if (oldAltitude > newAltitude) {
            InputMethodManager gfg = (InputMethodManager) mContentView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            boolean isAcceptingText = gfg.isAcceptingText();
if (isAcceptingText) {
        keyboardVisibleState = true;
    }
if (keyboardVisibleState) {
    if (keyboardChecker != null) {
            keyboardChecker.onKeyboardVisible();
            }
        }
    }
}

Conclusión

Si el teclado está visible después de presionar el botón, usamos hideSoftKeyboard para ocultarlo. Finalmente, inicie la aplicación y vea los resultados en su dispositivo móvil. En este blog, aprendimos cómo determinar si el teclado se muestra o no en la pantalla. También tenemos cómo cerrar el teclado si está visible. Eso concluye este blog.

Publicación traducida automáticamente

Artículo escrito por therebootedcoder y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *