2013-07-18 18 views
12

私のキーのいくつかを他のものと違うものにしたいと思います。Androidソフトキーボードのキーのキー背景を変更する方法

例えば、シフトのように、写真の下には、スペースキーを削除します。

enter image description here

グーグルからの参照文書によります。 "android:[email protected]/xxx"( "input.xml")を使用してキーの背景を変更できますが、キーボードのすべてのキーの背景が変更されます。

qwerty.xmlの "android:keyicon"は単一のキーを変更できますが、ラベルのみを置き換えます。一方、 "android:keyicon"を使用すると、イメージはキー全体をカバーすることはできません。イメージはキーの背景よりも小さいビットになります。

いくつかのキーの背景を変更する正しい方法は何ですか?

+0

あなたは以下のリンク 1. [リンク1] [1] 2. [リンク2] [2] [1]参照することができます。http: //stackoverflow.com/questions/15789997/how-to-change-background-color-of-key-for-android-soft-keyboard [2]:http://stackoverflow.com/questions/18180136/how - 背景 - 色 - または - キーのテーマ - 動的 - 私は変化するn-custom-keyboard-a – ashishmohite

答えて

13

カスタムキーボードの作成方法を理解しているかどうかは不明です。あなたがそうでない場合は、here's小さな数字のキーボードを作成するダウンロード可能な小さなプロジェクト。 CustomKeyboardViewクラスまたは独自のカスタムキーボードクラスに、次のメソッドを追加します。これはonDraw()メソッドをオーバーライドし、コード7(この場合は "0")の赤と他のすべてのキーが青で定義されたキーの背景を描画します。この場合

tinted keys

@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%の透明正方形の画像を使用して、既存のボタンは、単に色で着色されている効果を達成していなかった私欲しかったもっとカスタムの結果を得るために、私はdrawableの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); 
     } 
    } 
}  

replaced keys

+0

ありがとう!あなたの例は私がパケットの名前を変更するときにバグを見つけるのを助ける。私は、生成するJavaを削除し、それを再生成する必要があります。 –

0

私はCOMENTSを投稿することができないので、コードでそれをやって、私はその良いと思う解決策がある場合、私は私が見つけた同様の質問へのリンクを置く:

Customize the appearance of a <Key>

+0

あなたは、キーにテキストを描画するソリューションを指しています。 OPはキーの背景を変更しようとしていました。 –

6

まず最初にXMLでこれを行う簡単な方法はないので、Javaで行う必要があります。

あなたは、次のコードを使用してキーのリストを取得することができます:あなたはキーのリストを持っている

Keyboard keyboard = keyboardView.getKeyboard(); 
List<Key> keys = keyboard.getKeys(); 

たら、のために使用して、変更したいものを見つけるためにそれらを反復処理することができますループは次のように:

for (Key key : keys) { 
    ... 
} 

Please refer to the documentation here for the properties of Keyboard.Key in Android.あなたはおそらくキーを区別するためにthe codesを使用したいと思います。

キーの背景色を直接変更する方法はありません。しかし、アイコンを変更する方法がありますので、これを使用して同じ動作をシミュレートすることができます。必要な色を含むドロウアブルオブジェクトを生成し、それをアイコンとして設定することができます。 NinePatchDrawableを使用できます。

この機能は、onStartInputView()またはonDraw()のいずれかの方法で追加できます。おそらく動作しているコードが表示されますhere

また、独自のキーボードを実装することもできます。あなたがそれをしたい場合は、Androidの実装hereを見ることができます。これをコピーして、必要に応じて直接変更することができます。

関連する問題