2012-10-23 6 views
5

Ich arbeite an einem Eingabegerät, das eine Taste hat, die ich sowohl als Home-Taste fungieren möchte, wenn sie selbst gedrückt wird, sondern auch als Modifikator für die anderen Tasten auf dem Gerät funktioniert.Kann ein Android-Modifier-Schlüssel auf eine Aktion zurückgreifen?

Ich weiß, dass Sie dies mit anderen Schaltflächen in der KCM-Datei tun können, und haben so etwas wie:

key ESCAPE { 
    base:        fallback BACK 
    alt, meta:       fallback HOME 
    ctrl:        fallback MENU 
} 

Ist es möglich, so etwas wie zu haben:

key CTRL_LEFT { 
    base:        fallback HOME 
    {SOMETHING HERE}:     CTRL_LEFT 
} 

so dass ich drücken kann diese Taste mit einer anderen Taste und haben Sie keinen Fallback auf HOME?

Vielen Dank im Voraus! : D

Antwort

1

Diese Funktionalität ist auf Systemebene nicht möglich: Eine Liste aller möglichen Optionen finden Sie unter http://source.android.com/tech/input/key-character-map-files.html.

Wenn Sie jedoch auf Anwendungsebene haben möchten, können Sie es programmieren, in wie folgt:

import android.view.KeyEvent; 

private boolean home = false; 

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if (event.getScanCode() == 29)  //29 == CTRL_LEFT 
    home = true;  //if we release this button, HOME needs to be invoked 
    else home = false; //so CTRL_LEFT was used as a modifier: no need to invoke HOME 

    //allow the system to pass key handling to the next listener 
    return super.onKeyUp(keyCode, event); 
} 

public boolean onKeyUp(int keyCode, KeyEvent event) 
{ 
    if (event.getScanCode() == 29 && home == true) 
    { 
    super.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HOME)); 
    return true;  //so we absorb the event 
    } 
    return super.onKeyUp(keyCode, event); 
} 

Dann, solange diese Anwendung eingerichtet ist, die Tastenanschläge zu erhalten (in der Regel ein Datenschutzproblem, es sei denn, Sie kodieren es für sich selbst), kann es die Tastenanschläge verarbeiten und die HOME-Schaltfläche bei Bedarf senden.

Sollten Sie sich entscheiden damit fortfahren, würden Sie die

base:        fallback HOME 

aus dem Code zu entfernen.

Verwandte Themen