在Android的自定义键盘设置键盘模式 [英] Set Keyboard Mode in android custom keyboard

查看:521
本文介绍了在Android的自定义键盘设置键盘模式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了使用Android键盘类自定义键盘。

我想有行的两种模式。一种是正常模式。一个是当用户presses的符号按钮。对于每个Keyboard.Row的符号按钮,在XML我指定的android:keyboardMode =@ + ID /符号。

现在,当我运行它,只有不指定了android行:keyboardMode显示。这是预料之中的,什么文件说。

我的问题是如何在我的code设置模式,以便与Android的行:keyboardMode =@ + ID /符号得到渲染

 <行>
    <关键的android:codeS =113机器人:keyLabel =Q/>
    <关键的android:codeS =119机器人:keyLabel =W/>
    <关键的android:codeS =101机器人:keyLabel =E/>
    <关键的android:codeS =114机器人:keyLabel =R/>
    <关键的android:codeS =116机器人:keyLabel =T/>
    <关键的android:codeS =121机器人:keyLabel =Y/>
    <关键的android:codeS =117机器人:keyLabel =U/>
    <关键的android:codeS =105机器人:keyLabel =我/>
    <关键的android:codeS =111机器人:keyLabel =O/>
    <关键的android:codeS =112机器人:keyLabel =P/>
    <关键的android:codeS = -  5安卓keyIcon =@可绘制/ keyboard_backspace_icon机器人:keyWidth =91dp/>
< /行>
<行的android:keyboardMode =@ + ID /符号>
    <关键的android:codeS =113机器人:keyLabel =+/>
    <关键的android:codeS =119机器人:keyLabel =_/>
    <关键的android:codeS =101机器人:keyLabel ==/>
    <关键的android:codeS =114机器人:keyLabel =%/>
    <关键的android:codeS =116机器人:keyLabel =^/>
    <关键的android:codeS =121机器人:keyLabel =| />
    <关键的android:codeS =117机器人:keyLabel =&放大器; LT; />
    <关键的android:codeS =105机器人:keyLabel =>中/>
    <关键的android:codeS =111机器人:keyLabel =[/>
    <关键的android:codeS =112机器人:keyLabel =]/>
    <关键的android:codeS = -  5安卓keyIcon =@可绘制/ keyboard_backspace_icon机器人:keyWidth =91dp/>
< /行>
 

解决方案

好理解了它自己。

有没有办法简单地切换键盘模式。什么,你所要做的就是手动创建它们之间的2个不同的键盘和开关。

下面是更新的XML的样子。请注意,要在这两个关键字的行不应该包括标志机器人:keyboardMode

 <! - 这是表明在两种模式下的行 - >
<行的android:keyWidth =51dp>
    <关键的android:codeS =49机器人:keyLabel =1/>
    <关键的android:codeS =50机器人:keyLabel =2/>
    <关键的android:codeS =51机器人:keyLabel =3/>
    <关键的android:codeS =52机器人:keyLabel =4/>
    <关键的android:codeS =53机器人:keyLabel =5/>
    <关键的android:codeS =54机器人:keyLabel =6/>
    <关键的android:codeS =55机器人:keyLabel =7/>
    <关键的android:codeS =56机器人:keyLabel =8/>
    <关键的android:codeS =57机器人:keyLabel =9/>
    <关键的android:codeS =48机器人:keyLabel =0/>
< /行>

&所述;! - 这是正常模式 - >
<行的android:keyboardMode =@整数/ keyboard_normal>
    <关键的android:codeS =113机器人:keyLabel =Q/>
    <关键的android:codeS =119机器人:keyLabel =W/>
    <关键的android:codeS =101机器人:keyLabel =E/>
    <关键的android:codeS =114机器人:keyLabel =R/>
    <关键的android:codeS =116机器人:keyLabel =T/>
    <关键的android:codeS =121机器人:keyLabel =Y/>
    <关键的android:codeS =117机器人:keyLabel =U/>
    <关键的android:codeS =105机器人:keyLabel =我/>
    <关键的android:codeS =111机器人:keyLabel =O/>
    <关键的android:codeS =112机器人:keyLabel =P/>
    <关键的android:codeS = -  5安卓keyIcon =@可绘制/ keyboard_backspace_icon机器人:keyWidth =91dp/>
< /行>

<! - 这是符号模式 - >
<行的android:keyboardMode =@整数/ keyboard_symbol>
    <关键的android:codeS =113机器人:keyLabel =+/>
    <关键的android:codeS =119机器人:keyLabel =_/>
    <关键的android:codeS =101机器人:keyLabel ==/>
    <关键的android:codeS =114机器人:keyLabel =%/>
    <关键的android:codeS =116机器人:keyLabel =^/>
    <关键的android:codeS =121机器人:keyLabel =| />
    <关键的android:codeS =117机器人:keyLabel =&放大器; LT; />
    <关键的android:codeS =105机器人:keyLabel =>中/>
    <关键的android:codeS =111机器人:keyLabel =[/>
    <关键的android:codeS =112机器人:keyLabel =]/>
    <关键的android:codeS = -  5安卓keyIcon =@可绘制/ keyboard_backspace_icon机器人:keyWidth =91dp/>
< /行>
 

然后创建一个integer.xml

 < XML版本=1.0编码=UTF-8&GT?;
<资源>
    &所述;整数名称=keyboard_symbol→1&其中; /整数GT;
    &所述;整数名称=keyboard_normal> 0℃/整数GT;
< /资源>
 

下面是相关的Java code。当你创建键盘对象你通过keyboard_normal或keyboard_symbol。

  normalKeyBoard =新的键盘(活动,R.id.board,R.integer.keyboard_normal);
 symbolKeyBoard =新的键盘(活动,R.id.board,R.integer.keyboard_symbol);
 

现在创建一个类变量来跟踪模式。默认值是R.integer.keyboard_normal

 私人INT mKeyboardState = R.integer.keyboard_normal;
 

现在你onKeyboardActionListner()。onKey方法把code捕捉切换模式(假设你已经在你的键盘创建了一个)。

关键

 如果(主要code == Keyboard.KEY code_MODE_CHANGE){
            如果(mKeyboardView!= NULL){
                如果(mKeyboardState == R.integer.keyboard_normal){
                    //改变符号键盘
                    如果(symbolKeyBoard == NULL){
                        symbolKeyBoard =新的键盘(mHostActivity,R.xml.hexkbd,R.integer.keyboard_symbol);
                    }

                    mKeyboardView.setKeyboard(symbolKeyBoard);
                    mKeyboardState = R.integer.keyboard_symbol;
                } 其他 {
                    如果(normalKeyBoard == NULL){
                        normalKeyBoard =新的键盘(mHostActivity,R.xml.hexkbd,R.integer.keyboard_normal);
                    }

                    mKeyboardView.setKeyboard(normalKeyBoard);
                    mKeyboardState = R.integer.keyboard_normal;
                }
                //无移位
                mKeyboardView.setShifted(假);
            }
        }
 

I have created a Custom Keyboard using the Android Keyboard Class.

I want to have Rows for two modes. One is the normal mode. And one is when the user presses the "Sym" button. For each Keyboard.Row for the "Sym" button in the XML i have specified android:keyboardMode="@+id/sym".

Now when i run it only the rows that do not specify the android:keyboardMode display. This is as expected and what the documentation says.

My questions is how do i set the Mode in my code so that the rows with android:keyboardMode="@+id/sym" get rendered?

<Row>
    <Key android:codes="113"    android:keyLabel="q" />
    <Key android:codes="119"    android:keyLabel="w" />
    <Key android:codes="101"    android:keyLabel="e" />
    <Key android:codes="114"    android:keyLabel="r" />
    <Key android:codes="116"    android:keyLabel="t" />
    <Key android:codes="121"    android:keyLabel="y" />
    <Key android:codes="117"    android:keyLabel="u" />
    <Key android:codes="105"    android:keyLabel="i" />
    <Key android:codes="111"    android:keyLabel="o" />
    <Key android:codes="112"    android:keyLabel="p" />
    <Key android:codes="-5"    android:keyIcon="@drawable/keyboard_backspace_icon" android:keyWidth="91dp" />
</Row>
<Row android:keyboardMode="@+id/sym">
    <Key android:codes="113"    android:keyLabel="+" />
    <Key android:codes="119"    android:keyLabel="_" />
    <Key android:codes="101"    android:keyLabel="=" />
    <Key android:codes="114"    android:keyLabel="%" />
    <Key android:codes="116"    android:keyLabel="^" />
    <Key android:codes="121"    android:keyLabel="|" />
    <Key android:codes="117"    android:keyLabel="&lt;" />
    <Key android:codes="105"    android:keyLabel=">" />
    <Key android:codes="111"    android:keyLabel="[" />
    <Key android:codes="112"    android:keyLabel="]" />
    <Key android:codes="-5"    android:keyIcon="@drawable/keyboard_backspace_icon" android:keyWidth="91dp" />
</Row>

解决方案

Ok figured it out myself.

There is no method to simply switch the keyboard modes. What you have to do is create 2 different keyboards and switch between them manually.

Here is what the updated XML looks like. NOTE that Rows that you want in both the keywords should not include the flag android:keyboardMode.

<!-- this is the row that shows in both modes -->
<Row android:keyWidth="51dp">
    <Key android:codes="49"    android:keyLabel="1"  />
    <Key android:codes="50"    android:keyLabel="2" />
    <Key android:codes="51"    android:keyLabel="3"  />
    <Key android:codes="52"    android:keyLabel="4"  />
    <Key android:codes="53"    android:keyLabel="5" />
    <Key android:codes="54"    android:keyLabel="6" />
    <Key android:codes="55"    android:keyLabel="7"  />
    <Key android:codes="56"    android:keyLabel="8" />
    <Key android:codes="57"    android:keyLabel="9" />
    <Key android:codes="48"    android:keyLabel="0"/>        
</Row>

<!-- this is the normal mode -->  
<Row  android:keyboardMode="@integer/keyboard_normal">
    <Key android:codes="113"    android:keyLabel="q" />
    <Key android:codes="119"    android:keyLabel="w" />
    <Key android:codes="101"    android:keyLabel="e" />
    <Key android:codes="114"    android:keyLabel="r" />
    <Key android:codes="116"    android:keyLabel="t" />
    <Key android:codes="121"    android:keyLabel="y" />
    <Key android:codes="117"    android:keyLabel="u" />
    <Key android:codes="105"    android:keyLabel="i" />
    <Key android:codes="111"    android:keyLabel="o" />
    <Key android:codes="112"    android:keyLabel="p" />
    <Key android:codes="-5"    android:keyIcon="@drawable/keyboard_backspace_icon" android:keyWidth="91dp" />
</Row>

<!-- this is the symbol mode-->
<Row  android:keyboardMode="@integer/keyboard_symbol">
    <Key android:codes="113"    android:keyLabel="+" />
    <Key android:codes="119"    android:keyLabel="_" />
    <Key android:codes="101"    android:keyLabel="=" />
    <Key android:codes="114"    android:keyLabel="%" />
    <Key android:codes="116"    android:keyLabel="^" />
    <Key android:codes="121"    android:keyLabel="|" />
    <Key android:codes="117"    android:keyLabel="&lt;" />
    <Key android:codes="105"    android:keyLabel=">" />
    <Key android:codes="111"    android:keyLabel="[" />
    <Key android:codes="112"    android:keyLabel="]" />
    <Key android:codes="-5"    android:keyIcon="@drawable/keyboard_backspace_icon" android:keyWidth="91dp" />
</Row>

Then create a integer.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="keyboard_symbol">1</integer>
    <integer name="keyboard_normal">0</integer>
</resources>

Here is the relevant java code. When you create the Keyboard object you pass the keyboard_normal or keyboard_symbol.

 normalKeyBoard = new Keyboard(activity, R.id.board, R.integer.keyboard_normal);
 symbolKeyBoard = new Keyboard(activity, R.id.board, R.integer.keyboard_symbol);

Now create a class variable to keep track of the mode. Default value is R.integer.keyboard_normal

private int mKeyboardState = R.integer.keyboard_normal;

Now in your onKeyboardActionListner().onKey method put the code to capture the key that switches the modes (assuming that you have created one in your keyboard).

        if( primaryCode== Keyboard.KEYCODE_MODE_CHANGE) {
            if(mKeyboardView != null) {
                if(mKeyboardState == R.integer.keyboard_normal){
                    //change to symbol keyboard
                    if(symbolKeyBoard== null){
                        symbolKeyBoard = new Keyboard(mHostActivity, R.xml.hexkbd, R.integer.keyboard_symbol);
                    }

                    mKeyboardView.setKeyboard(symbolKeyBoard);
                    mKeyboardState = R.integer.keyboard_symbol;
                } else {
                    if(normalKeyBoard== null){
                        normalKeyBoard = new Keyboard(mHostActivity, R.xml.hexkbd, R.integer.keyboard_normal);
                    }

                    mKeyboardView.setKeyboard(normalKeyBoard);
                    mKeyboardState = R.integer.keyboard_normal;
                }
                //no shifting
                mKeyboardView.setShifted(false);
            }
        }

这篇关于在Android的自定义键盘设置键盘模式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆