2013-04-23 66 views
9

Tôi đã tạo Bàn phím tùy chỉnh bằng cách sử dụng Lớp bàn phím Android.Đặt Chế độ bàn phím trong bàn phím tùy chỉnh Android

Tôi muốn có Hàng cho hai chế độ. Một là chế độ bình thường. Và một là khi người dùng nhấn nút "Sym". Đối với mỗi Keyboard.Row cho nút "Sym" trong XML tôi đã chỉ định android: keyboardMode = "@ + id/sym".

Bây giờ, khi tôi chỉ chạy các hàng không chỉ định màn hình android: keyboardMode. Đây là như mong đợi và những gì tài liệu nói.

Câu hỏi của tôi là làm cách nào để đặt Chế độ trong mã của tôi sao cho các hàng có android: keyboardMode = "@ + id/sym" được hiển thị?

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

Trả lời

15

Ok tự tìm hiểu.

Không có phương pháp nào để chỉ chuyển đổi chế độ bàn phím. Những gì bạn phải làm là tạo 2 bàn phím khác nhau và chuyển đổi giữa chúng theo cách thủ công.

Dưới đây là những gì XML được cập nhật trông như thế nào. LƯU Ý rằng Hàng mà bạn muốn trong cả hai từ khóa không được bao gồm cờ 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> 

Sau đó tạo một integer.xml

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

Đây là đoạn mã java có liên quan. Khi bạn tạo đối tượng Bàn phím, bạn chuyển keyboard_normal hoặc keyboard_symbol.

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

Bây giờ, hãy tạo biến lớp để theo dõi chế độ. Giá trị mặc định là R.integer.keyboard_normal

private int mKeyboardState = R.integer.keyboard_normal; 

Bây giờ trong onKeyboardActionListner của bạn(). Phương pháp onKey đặt mã để nắm bắt chìa khóa chuyển mạch chế độ (giả định rằng bạn đã tạo ra một bàn phím của bạn).

 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

Có mã khóa để kích hoạt KEYCODE_MODE_CHANGE không? Tôi không thể tìm thấy nó. –

Các vấn đề liên quan