sirve - personalizar teclado android
¿Hay alguna forma de saber si se muestra el teclado virtual? (4)
¿Hay alguna forma de saber si el teclado se muestra en una actividad o no?
Lo intenté
InputMethodManager manager = (InputMethodManager)
getSystemService(getApplicationContext().INPUT_METHOD_SERVICE);
manager.isActive(v)
pero isActive devuelve false solo antes de la primera vez que se muestra el teclado, pero si kb aparece y luego se descarta, isActive también devuelve true
Entonces, ¿hay algún otro método para verificar este problema?
Gracias
Esta es mi idea No está probado.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks whether a keyboard is available which is not hard keyboard
if ((newConfig.keyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO)&&(newConfig.keyboardHidden != Configuration.HARDKEYBOARDHIDDEN_NO)) {
Toast.makeText(this, "soft keyboard visible", Toast.LENGTH_SHORT).show();
} else if (newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_YES) {
Toast.makeText(this, "soft keyboard hidden", Toast.LENGTH_SHORT).show();
}
}
Por favor revise los cambios de configuración para su actividad
Esto para tu AndroidManifest.xml
y esto para su clase de actividad http://developer.android.com/reference/android/app/Activity.html#onConfigurationChanged(android.content.res.Configuration )
Necesitará @ Anular el método público onConfigurationChanged (android.content.res.Configuration) de su Actividad para poder manejar, por ejemplo, estos valores:
Teclado duro oculto ,
teclado
teclado oculto
Para todos los valores posibles, visite http://developer.android.com/reference/android/content/res/Configuration.html
Verás allí algo como esto:
HARDKEYBOARDHIDDEN_NO
HARDKEYBOARDHIDDEN_UNDEFINED
HARDKEYBOARDHIDDEN_YES
KEYBOARDHIDDEN_NO
KEYBOARDHIDDEN_UNDEFINED
KEYBOARDHIDDEN_YES
KEYBOARD_12KEY
KEYBOARD_NOKEYS
KEYBOARD_QWERTY
KEYBOARD_UNDEFINED
También allí podrás leer algo como esto:
public int hardKeyboardHidden // A flag indicating whether the hard keyboard
// has been hidden.
public int keyboard The kind of keyboard attached to the device.
public int keyboardHidden A flag indicating whether any keyboard is available.
ACTUALIZAR:
Aquí hay un ejemplo específico de lo que estoy hablando:
http://developer.android.com/guide/topics/resources/runtime-changes.html
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
// Checks whether a hardware keyboard is available
if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
} else if (newConfig.hardKeyboardHidden ==
Configuration.HARDKEYBOARDHIDDEN_YES) {
Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
}
}
Puede detectar el estado Y las coordenadas del teclado del software, usando el comando dumpsys
shell.
Debido a que dumpsys requiere permission.android.DUMP
, que es un permiso de aplicación del sistema, tiene dos opciones: 1. usar un dispositivo rooteado para otorgar este permiso. 2. sobrescriba el problema usando adb
como se describe en mi otra respuesta .
Ahora, ejecute el siguiente comando: dumpsys window InputMethod | grep "mHasSurface"
dumpsys window InputMethod | grep "mHasSurface"
para obtener los datos que busca.
Según este POST
No puede detectar si se muestra o no el teclado virtual, pero puede saber indirectamente que se muestra un teclado de teclas programables al saber que la View
de su actividad está redimensionada.
Imagina que tienes un ListView
y en la parte inferior un EditText
, quieres ir al final de la lista cuando se muestra un teclado virtual después de que el usuario haga clic en el EditText.
ListActivity
implementar una subclase de ListView
, luego usarla en su ListActivity
o Activity
o View
.
public class ThreadView extends ListView {
public ThreadView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}
@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld) {
super.onSizeChanged(xNew, yNew, xOld, yOld);
if (yOld > yNew) {
setSelection(((ListAdapter) getAdapter()).getCount() - 1);
}
}
}
Espero que esto ayude
PD. "verificar cambios de configuración" solo funciona con el teclado de mano.