【问题标题】:how to add different state for a specific key of a custom keyboard in android如何在android中为自定义键盘的特定键添加不同的状态
【发布时间】:2015-03-30 17:32:51
【问题描述】:

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

@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。我认为他们可能是另一种方式。请任何知道这个技巧的人指导我。提前致谢。注意:我只想为这个自定义键添加不同的状态:)

【问题讨论】:

    标签: android android-softkeyboard android-button


    【解决方案1】:

    您的可绘制对象不是 9 补丁,因此您不能将其作为 9 补丁施放。将其用作标准 Drawable。

    【讨论】:

    • 我使用标准的 Drawable。这次没有错误,但是当状态改变时图像没有改变……我认为这不是这样做的方法……有什么线索吗? @Gabe Sechan
    【解决方案2】:

    android:state_pressed 放在android:drawable 之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 2016-03-03
      • 2013-08-15
      • 2011-02-28
      • 1970-01-01
      • 2023-03-24
      • 2017-04-20
      相关资源
      最近更新 更多