不同的钥匙的另外背景颜色在android软的键盘

时间:2012-10-07 17:51:01

标签: android android-softkeyboard

我使用了" Android Icon Set" (在eclipse中),它在各种可绘制文件夹中创建了不同大小的图标。现在,当我使用以下代码设置此图标时:

<Key android:codes="49" android:keyIcon="@drawable/my1" android:keyWidth="7%p"/>

Icon没有获取完整的密钥,它是某些设备的中心,并且在其他设备的密钥之外。我需要紧急解决这个问题,请指导我。我的主要要求是我想在我的自定义键盘上使用某些不同的颜色键(基于samplesoft键盘),因为很难改变关键背景我正在使用图像,现在图像不占用整个空间。

3 个答案:

答案 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无法控制)。