Deshabilitar una tecla en el teclado personalizado de Android

Tengo teclado personalizado en mi aplicación para Android. Es el diseño descrito en xml como este

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent""> <Row> <Key android:keyLabel="F1" android:keyOutputText="F1"/> <Key android:keyLabel="F2" android:keyOutputText="F2"/> <Key android:keyLabel="F3" android:keyOutputText="F3"/> ... 

Por lo tanto, estoy insteresting cómo puedo desactivar, por ejemplo 'f1' clave ~ que sea gris e intocable. Hay algunas preguntas similares aquí, pero todo sobre soft-KB por defecto.

Sé que puedo iterar a través de claves como esta

 for (Keyboard.Key key : myKeyboard.getKeys()) 

Pero parece que los objetos de la clase Keyboard.Key son inútiles para cualquier cambio en la apariencia de la clave.

UPD : No encontré solución. Implementé el teclado manualmente – diseño relativo grande, botones comunes y botones personalizados y todo bien. Por cierto – teclado personalizado al menos más hermoso. Simplemente copie recursos de droid 4+ – y obtendrá bonitos botones transparentes modernos y diseño transparente en cada plataforma.

Actualmente estoy usando android:horizontalGap para colocar un espacio negro (con el ancho de una tecla) en el lugar donde se debe colocar la clave desactivada (de esta manera, puedo ocultar claves no permitidas en cada pantalla, porque mi teclado siempre ha La misma distribución). Es una solución pobre, sin embargo.

El principal problema es para las teclas más a la derecha, desde android:horizontalGap sólo se puede establecer para el lado izquierdo de una tecla. Pero usando un android:keyWidth="0" en una clave falsa más a la derecha y luego establecer allí el android:horizontalGap adecuado android:horizontalGap , hace el truco. Una solución aún más pobre …

¿Alguna solución mejor?

Por lo general, el teclado sólo es visible si está editando algo, por lo que puede atrapar las ediciones a través del objeto. Si es un cuadro editText, entonces puede agregar un escucha y, a continuación, puede desactivar cualquier respuesta al texto de edición. No estoy seguro de si esto es útil para usted, pero al menos puede atrapar cualquier entrada no deseada.

  // add a keylistener to keep track user input editText.setOnKeyListener(new View.OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { // if keydown and "enter" is pressed if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { // do some thing or nothing return true; } return false; } }); 

Si la tecla es un botón, entonces es simple:

 key.setEnabled(false); 

De lo contrario, basta con hacer que no haga clic:

 key.setClickable(false); 

… y cambiar su aspecto (color de fondo, color de texto, etc.). La forma más sencilla de hacerlo es:

 key.setBackgroundColor("0xFFAAAAAA"); 
  • Android: ListView no se desplaza con el teclado
  • El teclado en pantalla se abre automáticamente cuando se inicia la actividad
  • Cambiar el diseño del teclado dinámicamente
  • Cierre el teclado al desplazarse en la lista desplegable de autocompletetextview en Android
  • Encuentra el idioma del teclado Android actual
  • ¿Cómo usar "adjustResize" para ajustar la vista en Android usando phonegap?
  • ¿Cómo desarrollar un teclado suave para Android?
  • Android - ¿Cómo crear el ID de xml?
  • ¿Cómo cambiar el color de fondo de la tecla para el teclado suave android?
  • Ajusta scrollview cuando el teclado está hacia arriba
  • ¿Cómo puedo detectar si el teclado del software es visible en el dispositivo Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.