2016-05-29 5 views
2

アンドロイドカスタムキーボードのカスタムキーのフォントスタイル(英語 - ユニコード以外)の変更に問題があります。 私はこのlink の答えに似た何かをたどってきました。これは、アプリ全体のフォントをキーボードの1文字のキーを含む新しいフォントに変更します。 私はキーテキストのサイズを変更したい場合は、私は2つのエントリ アンドロイドカスタムキーボードのカスタムキー(ラベル)のフォントを変更する

android:keyTextSize="25sp" // for single character keys 
android:labelTextSize="20sp" // for multiple character keys 

しかし残念ながら上記のリンクでの方法は、単一の文字キーのみのために働くの下に使用することができます。複数の文字キーのフォントを設定する方法はありますか?

次の例を参照してください。 最初のボタンにはデフォルトのシステムフォントが2番目と3番目のボタンには正しいフォントが設定されています。

enter image description here

EDITBhavita Lalwanianswerを読んだ後、それは私が考えるようになりました。ここ

if (label != null) { 
     // For characters, use large font. For labels like "Done", use small font. 
     if (label.length() > 1 && key.codes.length < 2) { 
      paint.setTextSize(mLabelTextSize); 
      paint.setTypeface(Typeface.DEFAULT_BOLD); 
     } else { 
      paint.setTextSize(mKeyTextSize); 
      paint.setTypeface(Typeface.DEFAULT); 
       } 
      } 

それはそれは彼らが単一のコードを持っている場合にのみ、複数の文字のためのBOLDフォントを使用しています

if (label.length() > 1 && key.codes.length < 2) 

言います。例えば、 。私はAndroid Engsがこれらのことを考えていると思う。 ???

Keyboard.KEYCODE_DONE 
Keyboard.KEYCODE_DELETE 

したがって、複数のコードを追加し、必要に応じて最初のコードのみを使用するのが醜い回避策です。

<Key android:codes="5001,1" android:keyLabel="AB" android:keyWidth="12%p" /> 

複数のコードを持つすべてのキーには、ユーザーDEFAULTタイプフェイスも使用できます。 この私はヒンディー語のカスタムキーボードを作成する際に、同様の問題を抱えていた。(非英語 - ユニコード)、今の作品(私は適切な解決策を:)見つけるまで)

答えて

2

なぜこの変動のは、あなたの犯人を見つけてみましょう起こる

KeyboardView.java in Android Source code

ライン701〜709

  if (label != null) { 
      // For characters, use large font. For labels like "Done", use small font. 
      if (label.length() > 1 && key.codes.length < 2) { 
       paint.setTextSize(mLabelTextSize); 
       paint.setTypeface(Typeface.DEFAULT_BOLD); 
      } else { 
       paint.setTextSize(mKeyTextSize); 
       paint.setTypeface(Typeface.DEFAULT); 
        } 
       } 

これは、大胆かつ異なるサイズの複数文字のラベルを作ること。 単一の文字ラベルはそのままです。

ソリューション

メソッドをオーバーライドしonDraw、このCustomKeyboardViewクラスで今、このKeyboardViewクラスに

public class CustomKeyboardView extends KeyboardView { 

public CustomKeyboardView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

を拡張CustomKeyboardViewクラスを作成します。あなたはsetTextSize方法にSPを使用するには、このチートコードを使用することができます

@Override 
    public void onDraw(Canvas canvas) { 
       super.onDraw(canvas); 
       Paint mpaint = new Paint(); 
       mpaint.setTypeface(Typeface.DEFAULT_BOLD); //to make all Bold. Choose Default to make all normal font 
       mpaint.setTextSize(24); in px 


     List<Keyboard.Key> keys = getKeyboard().getKeys(); 
     for (Keyboard.Key key : keys) { 

      if (key.label != null) { 
       String keyLabel = key.label.toString(); 
       canvas.drawText(keyLabel, key.x + key.width, key.y + key.height, mPaint); 
      } else if (key.icon != null) { 
       key.icon.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
       key.icon.draw(canvas); } 
      } 
    } 

キャンバス上のキーボードとキーを描画するときにこのメソッドが呼び出されます

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <dimen name="custom_text_size">25sp</dimen> 
</resources> 

と最後に

mpaint.setTextSize(getResources().getDimensionPixelSize(R.dimen.custom_text_size)); 

同じようにキーボードの作成に使用しました。

 KeyboardView kv = (CustomKeyboardView) getLayoutInflater().inflate(R.layout.mainkeyboard, null); //mainkeyboard 
    Keyboard keyboard = new Keyboard(this, R.xml.hindi); //Your Keyboard Layout 
    kv.setKeyboard(keyboard); //Set the keyboard 

あなたは行けます。

希望します。D

+0

残念ながら、これは実際には私のためには機能しませんでした。カスタムキーは間違ったフォントを表示します。しかし、これは私にアイデアを与えました。私の編集した質問の第2部を参照してください。 – RJE

+0

あなたは確かに、それは機能していませんか?それは私のために働いた。 しかし、私はsuper.onDrawを削除しなければなりませんでした。 (私が上で書いたコードから) 明らかにコードのセットを使用していたので、それらを別々に描画する前に太字のdefaultを使用して描画しています。 オーバーライドされたonDrawからsuper.onDrawを削除してみてください(実際にonDrawを実装した場合に必要な追加の依存関係をチェックアウトしてください)。 あなたのためにうまくいくならば、謝罪してください。 –

関連する問題