¿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>
- CheckBox no aparece en CheckedTextView
- Android Eclipse todas las fuentes Spinner se convirtieron en blanco
- Android: mover el texto del botón a la parte inferior
- El botón no cambia su forma en el selector
- No se puede resolver drawable en el atributo "src"
- Android - tema de los padres desaparecidos?
- Recursos de la cadena de fondo de Android
- ¿Cómo establecer el valor de alfa / opacidad a color en xml dibujable?
- Las guías de la API de Android son un poco confusas para mí sobre el atributo android: onClick XML
- Color del borde en el botón de Android
- Elemento de menú de Android con el icono y el texto juntos cuando showAsAction nunca es
- Android: animateLayoutChanges = "true" con setVisibility (View.GONE)
- Cómo recuperar atributos de estilo mediante programación de styles.xml
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 ()