10

カスタムキーボードアプリケーションに取り組んでいます

これは、ユーザーが青を選択したときのキーの背景色です

ユーザーが緑を選択した場合、これは背景色になります

これは、ソフトキーボードの背景色のコードですinput.xml:-

     @Override
    public View onCreateInputView() {


      Log.e("onStartInputView ","On StartInput View Called--");

      SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
      String Backgroundcolour = preferences.getString("BackgroundColour","");

     Log.e("Brithnesss- -","----"+Backgroundcolour);

    if(Backgroundcolour.equalsIgnoreCase("black"))
    {

    this.mInputView = (KeyboardView) getLayoutInflater().inflate(
            R.layout.input, null);


    }else
    {
        this.mInputView = (KeyboardView) getLayoutInflater().inflate(
            R.layout.input1, null);
        //this.mInputView.setB
    }

    this.mInputView.setOnKeyboardActionListener(this);
    this.mInputView.setKeyboard(this.mQwertyKeyboard);
    return this.mInputView;
}

 @Override public void onStartInputView(EditorInfo attribute, boolean restarting) {
    super.onStartInputView(attribute, restarting);
    // Apply the selected keyboard to the input view.

    setInputView(onCreateInputView());

}

特定のキーの背景画像を設定する方法がわかりません。

4

3 に答える 3

10

例として、カスタム数値キーボードを作成するダウンロード可能な小さなプロジェクトがあります。そこの 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);
        }            
    }
}

着色されたキー

この場合、9 パッチの画像は使用しませんでしたが、単純な 50% 透明の正方形の画像だけを使用して、既存のボタンが必要な色で着色されているだけの効果を実現しました。よりカスタムな結果を得るには、背景のドローアブルを 9 パッチ イメージにして、次のようにします。アイコン付きの 2 つのキーが正しくレンダリングされないことに注意してください。これは、アイコンが 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);
        }
    }
}    

交換した鍵

于 2014-03-17T13:48:03.890 に答える
1

シンプルに保つために、クラスMyKeyboardViewを作成して、これに似たハックを行う必要があります。

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();
        Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/Hippie.otf");
        paint.setTypeface(font);
        paint.setTextSize(40);

        List<Key> keys = getKeyboard().getKeys();
        for(Key key: keys) { // int i = 0 ; switch(i) and implement your logic 

        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-14T02:09:22.267 に答える