如何在android中为自定义键盘的特定键添加不同的状态

时间:2015-01-31 07:51:48

标签: android android-softkeyboard android-button

我想更改自定义键盘中特定键的背景颜色/图像。我正在使用谷歌软键盘源代码。我想将我的密钥编辑到LatinKeyboardView的onDraw方法中,该方法扩展了KeyboardView。这是我的代码

@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.sticky) {
            // Log.d("DEBUG",key.label.toString());

            NinePatchDrawable npd = (NinePatchDrawable) context
                    .getResources().getDrawable(R.drawable.btn_nine);
            npd.setBounds(key.x, key.y, key.x + key.width, key.y
                    + key.height);
            npd.draw(canvas);
            if (key.icon != null) {
                 key.icon.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
                 key.icon.draw(canvas);
            }

        }


    }

}

在这个onDraw方法中我成功地自定义了一个特定的键(在我的情况下是shift键)但是我不能为这个键添加不同的状态。我想如果我改变了这个中的代码

NinePatchDrawable npd = (NinePatchDrawable) context
                    .getResources().getDrawable(R.drawable.mybutton);

并像这样制作mybutton.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/btn_nine_pressed" android:state_pressed="true"></item>
<item android:drawable="@drawable/btn_nine"></item>

</selector>

但是当我运行它时我得到了classCastException。我认为他们可能是另一种方式。请任何知道这个技巧的人指导我。提前致谢。 N.B:我只想在这个自定义密钥中添加不同的状态:)

2 个答案:

答案 0 :(得分:0)

你的drawable不是9补丁,所以你不能把它作为一个补丁。将其用作标准Drawable。

答案 1 :(得分:0)

android:state_pressed放在android:drawable

之前