目前尚不清楚您是否了解如何创建自定义键盘。如果您不这样做,这里有一个可以创建自定义数字键盘的小型可下载项目。到那里的 CustomKeyboardView 类或您自己的自定义键盘类,添加以下方法。它覆盖 onDraw() 方法并将使用代码 7(在本例中为“0”)定义的键的背景绘制为红色,并将所有其他键绘制为蓝色。
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
List<Key> keys = getKeyboard().getKeys();
for (Key key : keys) {
if (key.codes[0] == 7) {
Log.e("KEY", "Drawing key with code " + key.codes[0]);
Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.red_tint);
dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
dr.draw(canvas);
} else {
Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.blue_tint);
dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
dr.draw(canvas);
}
}
}
在这种情况下,我没有使用 9-patch 图像,而只是一些简单的 50% 透明方形图像,并实现了现有按钮仅用我想要的颜色着色的效果。为了获得更自定义的结果,我可以让我的 drawables 9-patch 图像并执行以下操作。请注意,带有图标的两个键无法正确渲染,因为它们没有被定义为 9-patch 图像,并且我没有采取任何特殊措施来使它们在本示例中很好地缩放。我也没有针对按键的不同状态使用不同的图像/效果;其他人已经展示了如何做到这一点。
@Override
public void onDraw(Canvas canvas) {
// super.onDraw(canvas);
List<Key> keys = getKeyboard().getKeys();
for (Key key : keys) {
if (key.codes[0] == 7) {
NinePatchDrawable npd
= (NinePatchDrawable) context.getResources().getDrawable(R.drawable.red_key);
npd.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
npd.draw(canvas);
} else {
NinePatchDrawable npd
= (NinePatchDrawable) context.getResources().getDrawable(R.drawable.blue_key);
npd.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
npd.draw(canvas);
}
Paint paint = new Paint();
paint.setTextAlign(Paint.Align.CENTER);
paint.setTextSize(48);
paint.setColor(Color.GRAY);
if (key.label != null) {
canvas.drawText(key.label.toString(), key.x + (key.width / 2),
key.y + (key.height / 2), paint);
} else {
key.icon.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
key.icon.draw(canvas);
}
}
}