use*_*144 13 android background key android-softkeyboard
我希望键盘上的一些键与其他键不同.
例如,如下图中的shift,delete,space键:

根据谷歌的参考文件.我们可以通过android:keybackground=@drawable/xxx在" input.xml"中使用" " 更改键的背景,但它会改变键盘中所有键的背景.
虽然qwerty.xml中的"android:keyicon"可以改变单个键,但它只替换标签.同时,使用" android:keyicon",图像无法覆盖整个按键,图像将比按键背景小一点.
更改某些键背景的正确方法是什么?
sco*_*ttt 14
目前尚不清楚您是否了解如何创建自定义键盘.如果你不这样做,这是一个小型可下载项目,可以创建一个自定义数字键盘.对于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);
}
}
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我没有使用9-patch图像,只是一些简单的50%透明方形图像,并且实现了现有按钮仅仅用我想要的颜色着色的效果.为了获得更自定义的结果,我可以制作我的drawables 9-patch图像并执行以下操作.请注意,带有图标的两个键无法正确渲染,因为它们未被定义为9个补丁图像,我没有特别努力使它们在此示例中很好地扩展.我也没有解决使用不同的图像/效果的各种状态的键; 其他人已经证明了如何做到这一点.
@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);
}
}
}
Run Code Online (Sandbox Code Playgroud)

首先要注意的是,在XML中没有简单的方法可以做到这一点,你需要用Java来完成它.
您可以使用以下代码获取密钥列表:
Keyboard keyboard = keyboardView.getKeyboard();
List<Key> keys = keyboard.getKeys();
Run Code Online (Sandbox Code Playgroud)
获得密钥列表后,可以使用for循环遍历它们以查找要更改的密钥:
for (Key key : keys) {
...
}
Run Code Online (Sandbox Code Playgroud)
有关Android中Keyboard.Key的属性,请参阅此处的文档.您可能希望使用代码来区分密钥.
您会注意到没有直接的方法来更改密钥的背景颜色.但是,有一种方法可以更改图标,因此您可以使用它来模拟相同的行为.您可以生成包含所需颜色的可绘制对象,并将其设置为图标.你可以使用NinePatchDrawable.
您可以在onStartInputView()方法或onDraw()方法中添加此功能.你可以看到一段据说可以在这里工作的代码.
或者,您可以决定实施自己的键盘.如果你想这样做,你可以在这里看到Android实现.您可以复制它并直接修改它以满足您的需要.
| 归档时间: |
|
| 查看次数: |
11118 次 |
| 最近记录: |