如何为Android自定义键盘设置不同的按键背景

您所在的位置:网站首页 如何设制键盘背景 如何为Android自定义键盘设置不同的按键背景

如何为Android自定义键盘设置不同的按键背景

2024-06-03 03:28| 来源: 网络整理| 查看: 265

我正在使用自定义键盘应用程序

这是软键盘中input.xml的背景色的代码:

12345678910111213141516171819202122232425262728293031323334353637     @Override     public View onCreateInputView() {       Log.e("onStartInputView","On StartInput View Called--");       SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);       String Backgroundcolour = preferences.getString("BackgroundColour","");      Log.e("Brithnesss- -","----"+Backgroundcolour);     if(Backgroundcolour.equalsIgnoreCase("black"))     {     this.mInputView = (KeyboardView) getLayoutInflater().inflate(             R.layout.input, null);     }else     {         this.mInputView = (KeyboardView) getLayoutInflater().inflate(             R.layout.input1, null);         //this.mInputView.setB     }     this.mInputView.setOnKeyboardActionListener(this);     this.mInputView.setKeyboard(this.mQwertyKeyboard);     return this.mInputView; }  @Override public void onStartInputView(EditorInfo attribute, boolean restarting) {     super.onStartInputView(attribute, restarting);     // Apply the selected keyboard to the input view.     setInputView(onCreateInputView()); }

我没有得到如何设置特定键的背景图像。

相关讨论 请参阅此stackoverflow.com/questions/15789997/ 我没有很正确地得到表格,您能告诉我如何设置不同的颜色键吗? 我需要为特定的按键背景设置背景,而不是为整个键盘设置相同的按键背景图像。 我急需 嗨@user ...我已经完成了彩色按键的操作,但是按键中的文本不可见..能帮我吗???

例如,有一个可下载的小项目,它创建了一个自定义数字键盘。向那里的CustomKeyboardView类或您自己的自定义键盘类中,添加如下所示的方法。它重写onDraw()方法,并用代码7(在本例中为" 0")定义的键的背景绘制为红色,而所有其他键则绘制为蓝色。

12345678910111213141516171819@Override public void onDraw(Canvas canvas) {     super.onDraw(canvas);     List keys = getKeyboard().getKeys();     for (Key key : keys) {                     if (key.codes[0] == 7) {             Log.e("KEY","Drawing key with code" + key.codes[0]);             Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.red_tint);             dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);             dr.draw(canvas);         } else {             Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.blue_tint);             dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);             dr.draw(canvas);         }                 } }

在这种情况下,我没有使用9色块图像,而是使用了一些简单的50%透明正方形图像,并实现了一种效果,即现有按钮仅用我想要的颜色着色。为了获得更自定义的结果,我可以将背景可绘制对象制作为9补丁图像,然后执行以下操作。请注意,带有图标的两个键无法正确呈现,因为该图标未定义为9色块图像,在本示例中,我没有做出任何特别的努力来使它们缩放良好。我也没有针对键的各种状态使用不同的图像/效果。其他人已经展示了如何做到这一点。

123456789101112131415161718192021222324252627282930313233@Override public void onDraw(Canvas canvas) {     // super.onDraw(canvas);     List keys = getKeyboard().getKeys();     for (Key key : keys) {         if (key.codes[0] == 7) {             NinePatchDrawable npd                 = (NinePatchDrawable) context.getResources().getDrawable(R.drawable.red_key);             npd.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);             npd.draw(canvas);         } else {             NinePatchDrawable npd                 = (NinePatchDrawable) context.getResources().getDrawable(R.drawable.blue_key);             npd.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);             npd.draw(canvas);         }         Paint paint = new Paint();         paint.setTextAlign(Paint.Align.CENTER);         paint.setTextSize(48);         paint.setColor(Color.GRAY);         if (key.label != null) {             canvas.drawText(key.label.toString(), key.x + (key.width / 2),                             key.y + (key.height / 2), paint);         } else {             key.icon.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);             key.icon.draw(canvas);         }     } }

相关讨论 长按自定义键盘视图的键时,如何以编程方式更改弹出背景? 答案中提供的链接无法回答问题。 @MaihanNijat,这本来不是应该的。 它只是提供标准样式自定义键盘的一种便利。 答案中显式添加的代码演示了对该项目的简单化更改(或官方文档和其他S / O帖子中提供的类似代码),以回答OP的问题。 @scottt您用什么来关闭键盘? @ ste9206我已经完成了彩色按键的操作,但是按键中的文本不可见..能帮我吗?

我创建了一个键盘应用程序,在其中使用了KeyboardView中的KeyBackground属性,如下所示:

1

为了动态地做到这一点,我使用以下代码:

12345678@Override public View onCreateInputView() {     mInputView = (KeyboardView) getLayoutInflater().inflate(R.layout.input, null);     mInputView.setBackgroundResource(R.drawable.buttonbgselector);     mInputView.setOnKeyboardActionListener(this);     mInputView.setKeyboard(mQwertyKeyboard);     return mInputView; }

保持简单,您应该使类MyKeyboardView并进行类似的修改。

123456789101112131415161718192021222324252627282930313233343536373839public 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 keys = getKeyboard().getKeys();         for(Key key: keys) { // int i = 0 ; switch(i) and implement your logic         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;     } }



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3