3

さまざまな描画可能なフォルダーにさまざまなサイズのアイコンを作成した「Android Icon Set」(Eclipse) を使用しました。次のコードを使用してこのアイコンを設定しているとき:

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

アイコンは完全なキーサイズではなく、一部のデバイスでは中央に表示され、他のデバイスではキーの外側に表示されます。これを緊急に修正する必要があります。ご指導ください。私の主な要件は、カスタム キーボード (samplesoft キーボードに基づく) に特定の異なる色のキーが必要であることです。これは、画像を使用しているキーの背景を変更するのが難しく、画像が完全なスペースを占めていないためです。

4

3 に答える 3

3

私は実際にこの問題に遭遇しました。残念ながら、それを機能させるための労力については、KeyboardView を無視して、ボタンを使用して独自に構築する方がよいと結論付けました。KeyboardView は非常に価値のあるものを提供しません。独自のものを構築することで、完全に制御できます。

Android 組み込みキーボードのソース コードを見るhttps://android.googlesource.com/platform/packages/inputmethods/LatinIME/ Google が、さまざまな背景色と他の多くの機能をサポートする独自の KeyboardView を再実装していることがわかります。キーボードのニーズが複雑な場合は、LatinIME プロジェクトから関連するコードを抽出して再利用することを検討したでしょう。

于 2013-08-14T12:46:37.770 に答える
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;
        }
    }
于 2014-01-14T01:51:41.950 に答える