我使用了" Android Icon Set" (在eclipse中),它在各种可绘制文件夹中创建了不同大小的图标。现在,当我使用以下代码设置此图标时:
<Key android:codes="49" android:keyIcon="@drawable/my1" android:keyWidth="7%p"/>
Icon没有获取完整的密钥,它是某些设备的中心,并且在其他设备的密钥之外。我需要紧急解决这个问题,请指导我。我的主要要求是我想在我的自定义键盘上使用某些不同的颜色键(基于samplesoft键盘),因为很难改变关键背景我正在使用图像,现在图像不占用整个空间。
答案 0 :(得分:3)
我其实只是遇到了这个问题。不幸的是,我总结说,为了让它工作的努力量,我最好忽略KeyboardView并且只是建立我自己的使用按钮。 KeyboardView不提供任何非常有价值的东西,通过建立自己的东西,你可以完全控制。
查看Android内置键盘https://android.googlesource.com/platform/packages/inputmethods/LatinIME/的源代码我看到谷歌重新实现了自己的KeyboardView,它支持不同的背景颜色以及许多其他功能。如果我的键盘需求很复杂,我会考虑从LatinIME项目中提取相关代码并重新使用它。
答案 1 :(得分:1)
如果你厌倦了找到解决方案。你必须尝试用我自己的逻辑覆盖你的KeyboardView的onDraw()。
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;
}
}
答案 2 :(得分:-2)
你不能使用那样的颜色:
在文件夹drawable
中,创建key_diff.xml
,其中应包含:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#AABBCC"/>
</shape>
例如,为普通键(keys_norm.xml
)创建第二个形状:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#0000CC"/>
</shape>
在你的情况下,我认为难以控制drawabe的大小,以防它是一个图像(同时考虑到“容器”具有固定的比例大小并且它的bg无法控制)。