Android Developer 网站中没有记录此功能,因此我不得不四处搜索。
由于它受 AOSP 支持,因此这不是 Google 的专有方法/功能。您的用户设备上不需要 root。
由于此功能在基于 Chromium 的浏览器中可用,因此我决定查看开源 Chromium Android 源代码(某人在 GitHub 上提供了镜像:https ://github.com/kuoruan/Chromium-Android )和我发现了这个功能是如何实现的。
相关行在这里:
在任何Activity情况下,您都可以覆盖该方法onProvideKeyboardShortcuts。
它提供了 3 个参数:data、menu和deviceId,我们data这里只需要它们。
这是方法签名:
fun onProvideKeyboardShortcuts(
data: MutableList<KeyboardShortcutGroup>?,
menu: Menu?,
deviceId: Int
)
这仅适用于 API 24 (Android Nougat) 及更高版本。
data是 的可变列表KeyboardShortcutGroup,它是一组键盘快捷键。
因此,您可以拥有多个包含多个快捷方式的组,这对于为您的用户分组快捷方式很有用。
要注册您的快捷方式,
- 创建一个
KeyboardShortcutGroup. 这是将您的键盘快捷键存储和分组在一起所必需的。该类接受 aCharSequence作为组名称的参数,因此您必须使用getString(R.string.your_resource)字符串资源。
val keyboardShortcutGroup = KeyboardShortcutGroup(/* the name of your group here: */ "Test Group")
- 定义您的键盘快捷键。键盘快捷键是使用
KeyboardShortcutInfo对象定义的,它在其构造函数中接受 3 个参数——标签、键(例如 A/Z/8/9)和修饰键。
以这种方式创建单个键盘快捷键:
KeyboardShortcutInfo("Shortcut One" /*label*/, KeyEvent.KEYCODE_Z/*key*/, KeyEvent.META_ALT_ON/*modifier*/)
您需要将键代码传递给键和修饰键的构造函数。
键和修饰键必须分开传入。
以下是可用的关键代码列表:
https ://developer.android.com/reference/android/view/KeyEvent#KEYCODE_0 (请参阅前缀为KEYCODE)
根据测试,有效的修饰键是:
META_SYM_ON可能有效(尚未测试),但 Caps Lock 无效。
要组合修饰键,
在 Java 中使用按位运算符:
KeyEvent.META_ALT_LEFT_ON | KeyEvent.META_CTRL_ON
在 Kotlin 中,使用or运算符:
KeyEvent.META_ALT_LEFT_ON or KeyEvent.META_CTRL_ON
- 为此
KeyboardShortcutGroup,使用 . 添加快捷方式addItem。
keyboardShortcutGroup.addItem(shortcut /* <-- the shortcut created earlier */)
- 添加
KeyboardShortcutGroup到data
data.add(keyboardShortcutGroup)
您的代码应如下所示:
override fun onProvideKeyboardShortcuts(
data: MutableList<KeyboardShortcutGroup>?,
menu: Menu?,
deviceId: Int
) {
super.onProvideKeyboardShortcuts(data, menu, deviceId)
// Requires API 24
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val keyboardShortcutGroup = KeyboardShortcutGroup("Test Group")
keyboardShortcutGroup.addItem(KeyboardShortcutInfo("Shortcut One", KeyEvent.KEYCODE_Z, KeyEvent.META_ALT_ON))
data?.add(keyboardShortcutGroup)
}
}
您应该看到最终结果:

您可以使用它来通知用户可用的快捷方式。请注意,这并没有实现它们,它只是在 Android 快捷菜单中添加了一个列表。