戈吉沙,
我也有类似的想法。该活动将是一个文本字符串列表,以注入 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);
但是 ime 在 onCreate 中启动活动时出现问题。也许是一个 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("");
清除剪贴板很重要。我正在使用 setText 以便我们与 Android 8+ 兼容。它用 11 变成了更漂亮的东西。哦,在 ime onCreate 中,我们也清除了剪贴板:
ClipboardManager clipboard = (ClipboardManager)
getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText("");
希望这可以帮助。实际上,我希望你在一年前提出问题后就已经明白了这一点……最好的鱼。