3

У меня есть пользовательский класс MyKBV, который расширяет KeyBoardView.I создал это настраиваемое представление, чтобы использовать собственный шрифт для ключей. Я могу видеть измененный шрифт на клавишах, но проблема заключается в каждом перекрытии клавиш с ключами по умолчанию из XML, который, как я полагаю, является TypefaceE.DEFAULT_BOLD.SO, то, что я вижу, это две строки на каждом ключе, выделенные жирным шрифтом, и один с Я хочу, чтобы очистить ключи по умолчанию, чтобы отображались только пользовательские. Я потратил много времени на это. Было бы полезно, если бы кто-нибудь мог указать, где я ошибаюсь или что могу do.Thanks !!Пользовательские кнопки KeyBoardView Android по умолчанию:

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; 
     } 
    }