2012-07-18 102 views
6

我正在开发Android版键盘应用程序。我试图为正常键和功能键不同的背景,但它没有工作:如何在键盘上为xml中的功能键设置不同的背景?

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <!-- Functional keys. --> 

    <item android:state_single="true" android:state_pressed="true" 
      android:drawable="@drawable/btn_keyboard_special" /> 
    <item android:state_single="true" 
      android:drawable="@drawable/btn_keyboard_special" /> 

    <!-- Toggle keys. Use checkable/checked state. --> 

    <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true" 
      android:drawable="@drawable/btn_keyboard_key_dark_pressed_on" /> 
    <item android:state_checkable="true" android:state_pressed="true" 
      android:drawable="@drawable/btn_keyboard_key_dark_pressed_off" /> 
    <item android:state_checkable="true" android:state_checked="true" 
      android:drawable="@drawable/btn_keyboard_key_dark_normal_on" /> 
    <item android:state_checkable="true" 
      android:drawable="@drawable/btn_keyboard_key_dark_normal_off" /> 

    <!-- Normal keys --> 

    <item android:state_pressed="true" 
      android:drawable="@drawable/glow" /> 
    <item android:drawable="@drawable/btn_keyboard_key_light_normal" /> 
</selector> 

回答

2

有一个XML属性名为Android:keyBackground。只需将该属性设置为drawable即可,应该没问题。

这attrbute添加到KeyboardView在input.xml中:

<KeyboardView android:keyBackground="@drawable/buttonbgselector" .../> 

我假设这是您正在使用指定的背景颜色为所有的键是什么。

仅针对功能键,创建一个合适的前景可绘制图像来覆盖整个按键,并将其分配到键盘布局xml的xml中的keyIcon

是完美的,使用覆盖相同尺寸也,柜面你不想改变keyIcon

+0

感谢您的回答 是的,我使用Android:keyBackground设置选择器。问题是当我设置keyIcon时,它并没有覆盖所有屏幕尺寸的所有键。 – Aydroid 2012-07-19 10:52:06

+0

每个键都有可以设置的背景图片 – gaara87 2012-07-19 16:25:51

+0

我不知道背景图片的属性名称 android:xxxx ???? – Aydroid 2012-07-19 17:52:52

2

这劈为我工作的背景图像。

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(); 
     paint.setTextAlign(Paint.Align.CENTER); 
     paint.setTextSize(25); 
     paint.setColor(Color.RED); 




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

}

改变你的布局XML来

<com.example.yourpackage.MyKeyboardView 
     android:id="@+id/keyboardview" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:focusable="true" 
     android:focusableInTouchMode="true" 
     android:visibility="gone" 
     android:background="#000000" 
      android:keyBackground="@drawable/keyboard_selector" /> 

您可能的onDraw()写多个条件按需要