Cuando se mueve el enfoque de entrada dentro o fuera de un campo de texto editable, Android muestra el método de entrada (como el teclado en pantalla) o lo oculta, según corresponda. El sistema también toma decisiones sobre cómo aparecen tu interfaz de usuario y el campo de texto sobre el método de entrada. Por ejemplo, cuando el espacio vertical de la pantalla está restringido, el campo de texto puede rellenar todo el espacio por encima del método de entrada. Para la mayoría de las apps, estos comportamientos predeterminados son todo lo que se necesita.
Sin embargo, en algunos casos, es posible que desees controlar más directamente la visibilidad del método de entrada y especificar cómo deseas que aparezca tu diseño cuando el método de entrada es visible. En esta lección, se explica cómo controlar la visibilidad del método de entrada y cómo responder a ella.
Cómo mostrar el método de entrada cuando comienza la actividad
Aunque Android enfoca el primer campo de texto en tu diseño cuando comienza la actividad, no muestra el método de entrada. Este comportamiento es el apropiado, porque ingresar texto podría no ser la tarea principal de la actividad. Sin embargo, si ingresar texto es la tarea principal (como en una pantalla de acceso), probablemente quieras que el método de entrada aparezca de forma predeterminada.
Para mostrar el método de entrada cuando comienza la actividad, agrega el atributo android:windowSoftInputMode
al elemento <activity>
con el valor "stateVisible"
. Por ejemplo:
<application ... > <activity android:windowSoftInputMode="stateVisible" ... > ... </activity> ... </application>
Nota: Si el dispositivo del usuario tiene un teclado de hardware conectado, el método de entrada de software no aparece.
Cómo mostrar el método de entrada a pedido
Si hay un método en el ciclo de vida de tu actividad en el que deseas asegurarte de que el método de entrada sea visible, puedes usar InputMethodManager
para mostrarlo.
Por ejemplo, el siguiente método toma un View
en el que el usuario debe escribir algo, llama a requestFocus()
con el objetivo de enfocarlo y, luego, showSoftInput()
para abrir el método de entrada:
Kotlin
fun showSoftKeyboard(view: View) { if (view.requestFocus()) { val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT) } }
Java
public void showSoftKeyboard(View view) { if (view.requestFocus()) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT); } }
Nota: Una vez que el método de entrada es visible, no deberías ocultarlo en forma programática. El sistema oculta el método de entrada cuando el usuario finaliza la tarea en el campo de texto, o bien el usuario puede ocultarlo con un control de sistema (como con el botón Atrás).
Especifica cómo debe responder tu IU
Cuando el método de entrada aparece en la pantalla, se reduce la cantidad de espacio disponible para la IU de tu app. El sistema toma una decisión sobre cómo debe ajustar la parte visible de la IU, pero es posible que no sea correcta. A fin de garantizar el mejor comportamiento para tu app, debes especificar cómo quieres que el sistema muestre tu IU en el espacio restante.
Para declarar tu tratamiento preferido en una actividad, usa el atributo android:windowSoftInputMode
en el elemento <activity>
de tu manifiesto con uno de los valores de "ajuste".
Por ejemplo, para asegurarte de que el sistema cambie el tamaño al espacio disponible, lo que garantiza que todo tu contenido de diseño sea accesible (aunque probablemente requiera desplazamiento), usa "adjustResize"
:
<application ... > <activity android:windowSoftInputMode="adjustResize" ... > ... </activity> ... </application>
Puedes combinar la especificación de ajuste con la especificación de visibilidad del método de entrada inicial desde arriba:
<activity android:windowSoftInputMode="stateVisible|adjustResize" ... > ... </activity>
Especificar "adjustResize"
es importante si la IU incluye controles que el usuario podría necesitar para acceder inmediatamente después o mientras realiza una entrada de texto. Por ejemplo, si usas un diseño relativo a fin de colocar una barra de botones en la parte inferior de la pantalla, "adjustResize"
cambia el tamaño del diseño para que la barra de botones aparezca sobre el método de entrada.