3

KeyBoardView를 확장하는 사용자 정의 MyKBV 클래스가 있습니다.이 사용자 정의보기를 작성하여 키의 사용자 정의 글꼴을 사용합니다. 내가 열쇠에 변경된 글꼴을 볼 수 있지만 문제는 각각의 Key overlapping은 XML의 기본 키와 같습니다. TypefaceE.DEFAULT_BOLD.SO 내가 보는 것은 각각의 키에 두 개의 문자열이 하나씩 있고 원하는 글꼴 만 표시되도록 기본 키를 지우려면 어떻게해야합니까? 나는이 작업에 많은 시간을 보냈습니다. 누군가 내가 잘못 가고있는 부분이나 내가 할 수있는 부분을 지적 할 수 있다면 도움이 될 것입니다. 할. 고마워! 당신이 된 onDraw를 오버라이드 (override)하는 경우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

() 당신이 먼저 배경을 그려 텍스트를 그린다.

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; 
     } 
    } 
관련 문제