How to set different background for function key in xml on keyboard?

I am developing a keyboard app for Android. I tried to set a different background for the regular key and function key, but this did not work:

<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> 
+6
source share
2 answers

There is an XML attribute called android: keyBackground. Just set this attribute to drawable, and that should be fine.

Add this attrbute to KeyboardView in input.xml:

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

I assume that this is what you use to assign a background color to all keys.

For function keys alone, create a suitable image for the main plan to cover the entire key and assign it keyIcon in xml of the xml keyboard layout.

To be perfect, use a background image that also spans the same size if you don't want to change keyIcon

+2
source

This hack works for me.

 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; } } 

}

change your xml layout to

  <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" /> 

You can write more conditions depending on the need for onDraw ()

+2
source

Source: https://habr.com/ru/post/920801/


All Articles