我正在为Android开发键盘应用程序。我尝试为普通键和功能键设置不同的背景但它不起作用:
<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>
答案 0 :(得分:2)
有一个名为android:keyBackground的XML-Attribute。只需将此属性设置为drawable,它应该没问题。
将此属性添加到input.xml中的KeyboardView:
<KeyboardView android:keyBackground="@drawable/buttonbgselector" .../>
我假设您使用的是为所有键指定背景颜色。
仅对于功能键,创建一个适当的前景可绘制图像以覆盖整个键,并将其分配给键盘布局xml的xml中的keyIcon
。
要完美,请使用覆盖相同尺寸的背景图片,如果您不想更改keyIcon
答案 1 :(得分:2)
这个黑客对我有用。
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;
}
}
}
将布局xml更改为
<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" />
您可以根据需要在onDraw()
中编写更多条件