2013-04-23 2 views
9

Я создал пользовательскую клавиатуру, используя класс клавиатуры Android.Установить режим клавиатуры в пользовательской клавиатуре Android.

Я хочу иметь ряды для двух режимов. Один из них - обычный режим. И один - когда пользователь нажимает кнопку «Sym». Для каждой Keyboard.Row для кнопки «Sym» в XML я указал андроид: keyboardMode = «@ + id/sym».

Теперь, когда я запускаю его только строки, которые не указывают экран android: keyboardMode. Это так, как ожидалось, и то, что говорится в документации.

Мои вопросы: как установить режим в моем коде так, чтобы строки с android: keyboardMode = "@ + id/sym" отображались?

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

ответ

15

ОК выяснил это сам.

Нет способа просто переключать режимы клавиатуры. Что вам нужно сделать, так это создать 2 разных клавиатуры и переключаться между ними вручную.

Вот как выглядит обновленный XML. Обратите внимание, что строки, которые вы хотите в обоих ключевых словах, не должны включать флаг 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> 

Затем создайте integer.xml

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

Вот соответствующий код Java. Когда вы создаете объект Keyboard, вы передаете key_normal или keyboard_symbol.

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

Теперь создайте переменную класса, чтобы отслеживать режим. Значение по умолчанию R.integer.keyboard_normal

private int mKeyboardState = R.integer.keyboard_normal; 

Теперь в вашем onKeyboardActionListner(). OnKey способ поставить код, чтобы захватить ключ, который переключает режимы (при условии, что вы создали один в клавиатуре).

 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); 
      } 
     } 
+0

Есть ли код клавиши для запуска KEYCODE_MODE_CHANGE? Я не могу его найти. –

Смежные вопросы