6

我正在为 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>
4

2 回答 2

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() 中编写更多条件

于 2014-01-14T01:42:45.753 回答
2

有一个名为 android:keyBackground 的 XML 属性。只需将此属性设置为可绘制对象,就可以了。

将此属性添加到 input.xml 中的 KeyboardView:

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

我假设这是您用来为所有键分配背景颜色的方法。

对于单独的功能键,创建一个适当的前景可绘制图像以覆盖整个键并将其分配到keyIcon键盘布局 xml 的 xml 中。

为了完美,请使用覆盖相同尺寸的背景图像,以防您不想更改 keyIcon

于 2012-07-19T05:08:04.387 回答