3

我有自定义MyKBV类扩展KeyBoardView.I创建此自定义视图使用自定义字体的键。我能够在键上看到更改的字体,但问题是每个键与XML中的默认键重叠,我认为它是TypefaceE.DEFAULT_BOLD.SO我看到的是每个键上的两个字符串,一个是粗体,另一个是字体我想要。我该如何去清除默认键,以便只有自定义的可见。我花了很多时间在这。如果有人能指出我要去哪里错了或我能做什么do.Thanks!Android自定义KeyBoardView清除默认键

public class MyKBV extends KeyboardView { 
Context context; 

@Override 
public void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 
    super.onDraw(canvas); 
    Paint paint = new Paint(); 
    Typeface font = Typeface.createFromAsset(context.getAssets(), 
      "fonts/Hippie.otf"); 
    paint.setTypeface(font); 
    paint.setTextSize(40); 

    List<Key> listKeys = getKeyboard().getKeys(); 

    for (Key key : listKeys) { 
     if (key.label != null) { 
      if (key.label.toString().length() > 1) { 
       paint.setTextSize(30); 
       canvas.drawText(key.label.toString(), key.x 
         + (key.width/2) - 15, key.y + (key.height/2) 
         + 10, paint); 
      } else { 
       canvas.drawText(key.label.toString(), key.x 
         + (key.width/2) - 10, key.y + (key.height/2) 
         + 10, paint); 
      } 
     } 
    } 

} 

public MyKeyBoardView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
    this.context = context; 

} 

}

+0

嗯,你有没有试过不打电话super.onDraw?这将阻止底层键盘绘制自己..假设你想自己做所有的绘图.. –

+0

你有没有找到任何解决方案@luckysing – Fay007

回答

0

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




     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; 
     } 
    } 
相关问题