2013-04-23 3 views
9

Android 키보드 클래스를 사용하여 맞춤 키보드를 만들었습니다.키보드 모드를 Android 키보드로 설정

행을 두 가지 모드로 갖고 싶습니다. 하나는 정상 모드입니다. 하나는 사용자가 "Sym"버튼을 눌렀을 때입니다. 각각의 Keyboard.Row에 대해 "Sym"단추를 XML에 지정했습니다. android : 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> 

을 만들 관련 자바 코드입니다. Keyboard 객체를 만들 때 keyboard_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

onKey 방법은 (당신이 당신의 키보드에서 하나를 만들었다 고 가정) 모드를 전환 키를 캡처하는 코드를 넣어(). 당신의 onKeyboardActionListner에서 지금
private int mKeyboardState = R.integer.keyboard_normal; 

입니다.

 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를 실행하는 데 필요한 키 코드가 있습니까? 나는 그것을 발견 할 수 없다. –

관련 문제