8

Androidでメタキー(CTRLなど)とキーコード(RETURNなど)の組み合わせを送信する方法がわかりません(APIレベル11 =バージョン3.0を使用しています)。

KeyEventクラスのドキュメントには、META_CTRL_ONなどの定数が記載されており、メタキーのキーコード定数(KEYCODE_CTRL_LEFTなど)もサポートされています。

Javascript Key Event Testerを使用して、入力方式エディター(IME)によって生成された出力をテストしています。ところで、私の目標はソフトウェアキーボードを開発することです。

ドキュメントが正しいことを理解していれば、次のコードを実行してCTRLキーのみを送信するだけで十分です。

this.sendDownUpKeyEvents(KeyEvent.KEYCODE_CTRL_RIGHT);

ただし、これをJavascript Key Event Tester(上記を参照)に対して実行しても、何も起こりません。

したがって、メタキーのみを送信する方法と、メタキーを別のキーと組み合わせて送信する方法の手がかりを得る必要があります。また、SHIFT + ENTER(具体例)を送信するために次のことを試みました。

private void _sendShiftEnter() {
    this.sendDownKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT);
    final long eventTime = SystemClock.uptimeMillis();
    this.getCurrentInputConnection().sendKeyEvent(
        new KeyEvent(
            eventTime, // The time (in uptimeMillis()) at which this key code originally went down.
            eventTime, // The time (in uptimeMillis()) at which this event happened.
            KeyEvent.ACTION_DOWN, // Action code: either ACTION_DOWN, ACTION_UP, or ACTION_MULTIPLE.
            KeyEvent.KEYCODE_ENTER, // The key code.
            0, // A repeat count for down events (> 0 if this is after the initial down) or event count for multiple events.
            KeyEvent.META_SHIFT_ON, // Flags indicating which meta keys are currently pressed.
            0, // The device ID that generated the key event.
            0, // Raw device scan code of the event.
            KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE, // The flags for this key event.
            InputDevice.SOURCE_KEYBOARD // The input source such as SOURCE_KEYBOARD.
        )
    );
}

ここでも上記と同じ問題が発生します。認識されるキーはENTERのみです。

メタキーやキーの組み合わせでKeyEventクラスを使用する方法の例をインターネットで数時間検索しましたが、コードの例が少なくとも1つ見つかりませんでした。

つまり、結論として、KeyEventクラスの経験があり、Android APIを介してキーの単純な組み合わせ(SHIFT + ENTERなど)を送信する方法を教えてくれる人はいますか?

前もって感謝します!

4

1 に答える 1

2

両方のメタキー修飾子を同時に入れただけで、うまくいきました...

たとえばKeyEvent.META_SHIFT_LEFT_ON | KeyEvent.META_SHIFT_ON

于 2015-05-12T06:41:47.437 に答える