ごぎしゃ、
私も似たような考えでした。アクティビティは、ime が作業しているドキュメントに挿入するテキスト文字列のリストになります。これが私がやった方法です。
マニフェストに、次のアクティビティを追加しました。
<activity
android:name="org.this_voice.prakeyboard.KeyboardMacros"
android:configChanges="keyboardHidden|orientation|screenSize"
android:excludeFromRecents="true"
android:label="@string/keyboardmacros"
android:screenOrientation="portrait" >
</activity>
次に、ime で、アクティビティを開始するための escape-char コードを取得します。
} else if (primaryCode == 27) {
Intent i = new Intent(this, KeyboardMacros.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("MODE","okay");
startActivity(i);
しかし、onCreate でアクティビティを開始する ime に問題がありました。おそらくAndroidのバグ/機能です。だから私はこれをアクティビティの onCreate に入れました:
Intent origin = this.getIntent();
String okay = origin.getStringExtra("MODE");
if ((okay == null) || (!okay.matches("okay"))){ finish(); }
そのため、27 (Esc) を送信するソフト キーを押したときにのみアクティビティが開始されます。アクティビティが開始され、リストが表示され、ユーザーがテキスト項目を選択すると、アクティビティがそれをクリップボードに読み込みます。
String macro = dbs.get(result);
ClipboardManager clipboard = (ClipboardManager)
getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText(macro);
finish();
そのため、ime を使用してエディターに戻ります。したがって、ime.startInput には次のものがあります。
ClipboardManager clipboard = (ClipboardManager)
getSystemService(Context.CLIPBOARD_SERVICE);
if (clipboard.hasText()){
getCurrentInputConnection().commitText(clipboard.getText(), 1);
clipboard.setText("");
クリップボードをクリアすることが重要です。Android 8以降と互換性があるように、setTextを使用しています。11 でより手の込んだものに変わりました。ああ、そして onCreate の ime では、クリップボードもクリアします。
ClipboardManager clipboard = (ClipboardManager)
getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText("");
お役に立てれば。実は、1 年前に質問して以来、このことをすでに理解していることを願っています.... 最高の魚。