keymap.xml 实体按键映射自定义
什么是 keymap.xml
keymap.xml 是 FBReader 提供的一个高级自定义功能——通过一个 XML 文件,可以在 Android 设备上把实体按键(电纸书的侧边翻页键、音量键、返回键等)重新绑定到 FBReader 的操作。
典型使用场景:
- 电纸书侧边键默认在其他 APP 里没用,想在 FBReader 里用
- 想把音量键也当成翻页键
- 想给组合键绑定特殊操作(比如同时按两个键触发书签)
创建 keymap.xml
在你的书籍文件夹里(默认是 Book 文件夹)创建一个名为 keymap.xml 的文件,内容类似:
<keymap>
<key keycode="24" action="PREV_PAGE"/>
<key keycode="25" action="NEXT_PAGE"/>
<key keycode="4" action="TOGGLE_TOC"/>
</keymap>
上面的例子把:
- 按键码 24(一般是音量上)→ 上一页
- 按键码 25(一般是音量下)→ 下一页
- 按键码 4(返回键)→ 打开目录
查找按键码
每个物理按键有一个 keycode 数字。怎么找?
- 用开发者选项:Android 开发者选项 → 开启「显示按键操作」,按一下按键屏幕上会显示 keycode
- 查文档:Nook、Kobo、InkBook 等设备有现成的 keymap.xml 模板,可以在 GitHub 上找到
- FBReader 源码:FBReader 源码里有几个设备的示例(如 keymap-nook.xml)
常见 keycode:
| 按键 | keycode |
|---|---|
| 音量上 | 24 |
| 音量下 | 25 |
| 返回 | 4 |
| 主页 | 3 |
| 菜单 | 82 |
| 电纸书侧边键(各品牌不同) | 需实测 |
可用的 Action
FBReader 里可以绑定的动作列表很长,完整列表在 ActionCode.java 源码文件里。常用的:
| Action | 说明 |
|---|---|
| NEXT_PAGE | 下一页 |
| PREV_PAGE | 上一页 |
| TOGGLE_TOC | 显示/隐藏目录 |
| TOGGLE_TABLE_OF_CONTENTS | 同上 |
| OPEN_BOOKMARKS | 打开书签列表 |
| ADD_BOOKMARK | 在当前位置加书签 |
| SEARCH | 打开搜索 |
| INCREASE_FONT_SIZE | 字号放大 |
| DECREASE_FONT_SIZE | 字号缩小 |
| TOGGLE_DAY_NIGHT | 日/夜模式切换 |
| OPEN_PREFERENCES | 打开设置 |
示例:Nook 电纸书
FBReader 官方提供了 Nook 电纸书的 keymap.xml 模板:
<keymap>
<key keycode="95" action="PREV_PAGE"/>
<key keycode="94" action="NEXT_PAGE"/>
<key keycode="257" action="NEXT_PAGE"/>
<key keycode="258" action="PREV_PAGE"/>
</keymap>
具体到你的设备,按键码需要自己测试。
不写 XML 也能用的简化方式
如果不想折腾 XML 文件,FBReader 设置里也有一些简化的按键选项:
- 音量键翻页(开/关)
- 音量键方向(上=下一页 / 上=上一页)
- 侧边键翻页(部分设备自动识别)
这些覆盖了最常见的需求。keymap.xml 是给那些想要完全自定义的人准备的。