Android软键盘上不同按键使用不同背景颜色的方法

3

我使用了“Android Icon Set”(在eclipse中),它在不同的drawable文件夹中创建了不同尺寸的图标。现在,当我使用以下代码设置此图标时:

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

图标没有占据完整的键位大小,在某些设备上它居中显示,而在其他设备上则在键位外部显示。我需要紧急修复这个问题,请指导我。我的主要需求是我想在自定义键盘(基于samplesoft键盘)上有一些不同颜色的键,由于更改键背景很困难,我正在使用图像,但现在图像没有占据全部空间。

3个回答

3
我其实也遇到了这个问题。不幸的是,我得出的结论是,为了让它正常工作所需要的努力不如忽略KeyboardView,改用按钮自己构建键盘。 KeyboardView没有提供任何非常有价值的东西,而通过自己构建,您可以获得完全的控制权。
查看Android内置键盘的源代码https://android.googlesource.com/platform/packages/inputmethods/LatinIME/,我看到Google已经重新实现了他们自己的KeyboardView,支持不同的背景颜色以及许多其他功能。如果我的键盘需求很复杂,我会考虑从LatinIME项目中提取相关代码并重用它们。

2
如果你已经厌倦了寻找解决方案,你可以尝试使用自己的逻辑重写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

你不能这样使用颜色:

在文件夹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>

在你的情况下,我认为难点在于控制可绘制对象的大小,特别是当它是一张图片时(同时还要考虑“容器”具有固定比例大小且其背景无法控制)。

我该如何为不同的键设置背景或背景颜色。我已经获取了按键代码,但无法为特定按键设置按键图标或背景颜色。 - user
我认为可以在 <Key android:codes="49" android:keyIcon="@drawable/key_diff" android:keyWidth="7%p"/> 内完成此操作,对于另一个按钮,则是:<Key android:codes="50" android:keyIcon="@drawable/key_norm" android:keyWidth="7%p"/> - 这样做不可行吗? - g00dy
哪一部分或整个内容是第二个,我会删除答案。 - g00dy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接