2013-09-06 21 views
10

Ich habe einen Charakter, und ich will es in Zwänge KeyEvent KeyCode http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_0Konvertieren eines Zeichens in keycode

Wie konvertieren, wenn ich einen Charakter haben ‚0‘ wan ich in

Key Code konstant konvertieren : Taste '0'.

Konstante Wert: (0x00000007)

wie in der KeyEvent Seite angegeben. Was kann eine beste Methode dafür sein? Gibt es eine vordefinierte Funktion, um es zu tun?

+0

Kennen Sie den Charakter, der konvertiert werden muss? Ist es eine Konstante oder wird es sich je nach Benutzer ändern? – user2483079

+0

Verschiedene Tastaturen verwenden verschiedene Konstanten ... das heißt, KEYCODE_0 ist ein 'public static final int', so dass Sie diesen Namen anstelle einer beliebigen Zahl 7 durch Ihre App aufrufen können ... Persönlich sind meine Glückszahlen KEYCODE_0 und KEYCODE_6. – Shark

+0

Ja, das würde ich erwähnen, aber es ist nicht ganz so einfach, wenn es keine Konstante ist. – user2483079

Antwort

2

Nein, Sie können kein Zeichen "0" aus der Eingabe lesen und eine magische Funktion verwenden, um das in KeyEvent.KEYCODE_0 umzuwandeln ... Wenn Sie dies tun, müssen Sie einen Parser schreiben, der den gelesenen Buchstaben und aktiviert gib diese Werte selbst zurück.

Nach allem, was ich weiß, bevor Sie den Charakter gelesen haben, sollten Sie das Ding in der onKey() gefangen haben. Je nach Anzahl der Tasten Sie auf diese Weise behandeln müssen, eine virtuelle Android-Tastatur könnte Ihre einzige Option sein, wenn dieser Standardcode, den Trick nicht tut,

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

ich zu Java/Android noch neu bin, Meine Antwort funktioniert vielleicht nicht sofort, aber Sie können die Idee trotzdem verstehen.

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

Ich habe die Idee, als ich den Code von sendText Methode in uiautomator Rahmen source code Lesen: Werke

1

Sehr unhöflich Lösung, aber für die meisten Zeichen.

Denken Sie daran, einen Groß zu tun, wenn Sie Ihren Text Kleinbuchstaben enthält, können Sie META_SHIFT_ON in diesem Fall hinzufügen, wenn Sie dann eine 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

Hier senden ist eine Lösung, die ich verwenden Zeichen in einer Webansicht zu setzen:

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