カスタム キーボードの作成方法を理解しているかどうかは不明です。そうでない場合は、カスタム数値キーボードを作成するダウンロード可能な小さなプロジェクトを次に示します。そこの 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);
}
}
}
