¿Cómo establecer un fondo diferente para la tecla de función en xml en el teclado?

Estoy desarrollando una aplicación de teclado para Android. Intenté fijar el fondo diferente para la llave normal y la llave de funcionamiento pero no trabajó:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Functional keys. --> <item android:state_single="true" android:state_pressed="true" android:drawable="@drawable/btn_keyboard_special" /> <item android:state_single="true" android:drawable="@drawable/btn_keyboard_special" /> <!-- Toggle keys. Use checkable/checked state. --> <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true" android:drawable="@drawable/btn_keyboard_key_dark_pressed_on" /> <item android:state_checkable="true" android:state_pressed="true" android:drawable="@drawable/btn_keyboard_key_dark_pressed_off" /> <item android:state_checkable="true" android:state_checked="true" android:drawable="@drawable/btn_keyboard_key_dark_normal_on" /> <item android:state_checkable="true" android:drawable="@drawable/btn_keyboard_key_dark_normal_off" /> <!-- Normal keys --> <item android:state_pressed="true" android:drawable="@drawable/glow" /> <item android:drawable="@drawable/btn_keyboard_key_light_normal" /> </selector> 

Hay un atributo XML llamado android: keyBackground. Simplemente establezca este atributo en un drawable y debería estar bien.

Agregue este attrbute a KeyboardView en input.xml:

 <KeyboardView android:keyBackground="@drawable/buttonbgselector" .../> 

Estoy asumiendo que esto es lo que usted está utilizando para asignar el color de fondo para todas las llaves.

Para las teclas de función solo, cree una imagen apropiada de primer plano dibujable para cubrir toda la clave y asignarla a keyIcon en el xml de la distribución de teclado xml.

Para ser perfecto, utiliza una imagen de fondo que cubre la misma dimensión también, en caso de que no quieras cambiar el keyIcon

Este trabajo de hack para mí.

 public class MyKeyboardView extends android.inputmethodservice.KeyboardView { Context context; public MyKeyboardView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub this.context = context ; } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); paint.setTextAlign(Paint.Align.CENTER); paint.setTextSize(25); paint.setColor(Color.RED); List<Key> keys = getKeyboard().getKeys(); for(Key key: keys) { if(key.pressed){ NinePatchDrawable npd = (NinePatchDrawable)context.getResources().getDrawable(R.drawable.glow); npd.setBounds(key.x,key.y,key.x+key.width,key.y+key.height); npd.draw(canvas); if(key.label != null) canvas.drawText(key.label.toString(), key.x + (key.width/2), key.y + 25, paint); }else if(key.modifier){ // boolean that defines key is function key NinePatchDrawable npd = (NinePatchDrawable)context.getResources().getDrawable(R.drawable.btn_keyboard_special); npd.setBounds(key.x,key.y,key.x+key.width,key.y+key.height); npd.draw(canvas); if(key.label != null) canvas.drawText(key.label.toString(), key.x + (key.width/2), key.y + 25, paint); } break; } } 

}

Cambiar su xml de la disposición a

  <com.example.yourpackage.MyKeyboardView android:id="@+id/keyboardview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:focusable="true" android:focusableInTouchMode="true" android:visibility="gone" android:background="#000000" android:keyBackground="@drawable/keyboard_selector" /> 

Usted puede escribir más condiciones según necesidad en onDraw ()

  • en negrita algunas palabras en el texto de xml
  • Quiero mostrar el idioma Reginonal (Gurumukhi) en mi aplicación para Android
  • Cómo acceder a colors.xml sin especificar el nombre del color o el ID del recurso (R.color.name)
  • Android: AlertDialog Button no acepta el estilo
  • Almacenar un texto grande y estructurado en la aplicación Android
  • Cómo agregar un degradado a los botones en android a través de xml?
  • XML dibujable compuesto de png y superposición
  • Mostrar hilandero en AlertDialog
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.