2013-09-06 38 views
10

Tôi có một nhân vật và tôi muốn chuyển đổi nó thành KeyEvent chế keyCode http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_0Chuyển đổi một nhân vật vào keycode

Giống như nếu tôi có một nhân vật '0' Tôi wan để chuyển đổi thành

chính đang liên tục : Phím '0'.

liên tục Value: (0x00000007)

theo quy định tại các trang KeyEvent. Những gì có thể là một phương pháp tốt nhất để làm điều này? Có chức năng được xác định trước nào để làm điều đó không?

+0

Bạn có biết nhân vật cần được chuyển đổi không? Nó là một hằng số hay nó sẽ thay đổi tùy thuộc vào người dùng? – user2483079

+0

Bàn phím khác nhau sẽ sử dụng các hằng số khác nhau ... được nói, KEYCODE_0 là 'int final final int' để bạn có thể gọi tên đó thay vì bất kỳ số 7 thông qua ứng dụng của bạn ... Cá nhân, số may mắn của tôi là KEYCODE_0 và KEYCODE_6. – Shark

+0

Yup, đó là những gì tôi đã đề cập đến nhưng nó không phải là khá dễ dàng nếu nó không phải là một hằng số. – user2483079

Trả lời

2

Không, bạn không thể đọc ký tự "0" từ đầu vào và sử dụng hàm ma thuật để chuyển đổi thành KeyEvent.KEYCODE_0 ... Nếu bạn làm như vậy, bạn sẽ phải viết trình phân tích cú pháp bật thư đã đọc và tự mình trả lại các giá trị này.

Đối với tất cả những gì tôi biết, trước khi đọc nhân vật bạn nên ghi lại nội dung trong số onKey(). Tùy thuộc vào số lượng phím bạn cần xử lý theo cách này, bàn phím ảo ảo có thể là tùy chọn duy nhất của bạn, nếu mã bản mẫu này không thực hiện thủ thuật

switch(keyPress) 
{ 
    case '0': return KeyEvent.KEYCODE_0; 
    case '1': return ... 
    //... 
    case 'Z': return KeyEvent.KEYCODE_Z; 
} 
2

Tôi vẫn còn mới sử dụng Java/Android, vì vậy câu trả lời của tôi có thể không hoạt động ra khỏi hộp, nhưng bạn vẫn có thể nhận được ý tưởng.

import android.view.KeyCharacterMap; 
import android.view.KeyEvent;  
... 
public class Sample { 
    ... 
    public boolean convertStringToKeyCode(String text) { 

     KeyCharacterMap mKeyCharacterMap = 
      KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD); 

     KeyEvent[] events = mKeyCharacterMap.getEvents(text.toCharArray()); 

     for (KeyEvent event2 : events) { 
      // We get key events for both UP and DOWN actions, 
      // so we may just need one. 
      if (event2.getAction() == 0) { 
       int keycode = event2.getKeyCode(); 
       // Do some work 
      } 
     } 
} 

Tôi có ý tưởng khi tôi đang đọc mã của sendText phương pháp trong khuôn khổ uiautomatorsource code:

1

giải pháp Rất thô lỗ nhưng làm việc cho hầu hết các nhân vật.

Hãy nhớ để làm một chữ hoa nếu văn bản của bạn có chứa chữ thường, bạn có thể thêm META_SHIFT_ON trong trường hợp đó nếu bạn sau đó gửi một KeyEvent

for (int i = 0; i < text.length(); i++) { 
     final char ch = text.charAt(i); 
     try { 
      dispatch(KeyEvent.class.getField("KEYCODE_" + ch).getInt(null)); 
     } catch (Exception e) { 
      Log.e(_TAG, "Unknown keycode for " + ch); 
     } 
    } 
6

Dưới đây là một giải pháp tôi sử dụng để đặt ký tự trong một webview:

char[] szRes = szStringText.toCharArray(); // Convert String to Char array 

KeyCharacterMap CharMap; 
if(Build.VERSION.SDK_INT >= 11) // My soft runs until API 5 
    CharMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD); 
else 
    CharMap = KeyCharacterMap.load(KeyCharacterMap.ALPHA); 

KeyEvent[] events = CharMap.getEvents(szRes); 

for(int i=0; i<events.length; i++) 
    MainWebView.dispatchKeyEvent(events[i]); // MainWebView is webview 
Các vấn đề liên quan