把 fcitx5-android 改造为 Colemak + 紫光双拼 触屏输入法
目录
今天把开源的 fcitx5-android 键盘从上到下改造了一遍:Colemak 键位 + 紫光双拼自动提示 + 双拼展开上屏,让触屏键盘既保留了 Colemak 肌肉记忆,又能直接"看见"双拼的声母/韵母分区。
改造后的键盘截图如下。

所有改动都在 GitHub 上可复现:
- 主仓库 fork:
https://github.com/xtccc/fcitx5-android-colemak - 子模块 fork:
https://github.com/xtccc/fcitx5-chinese-addons
下面把每一项功能变动梳理一遍。
1. Colemak 触屏字母布局
把内置字母键盘从 QWERTY 改成 Colemak 排列,同时保留 Caps 与 Backspace 功能键:
QWERTY: Q W E R T Y U I O P
Colemak: Q W F P G J L U Y ;
A R S T D H N E I O
Z X C V B K M
注意第三行末位多了一个 ;(N 之后)——这是为紫光双拼补的键位,见下一节。
2. 紫光双拼:声母/韵母提示贴片
这是这个输入法最"肉眼可见"的改动。每个字母键上方显示声母(韵母原始控制区),下方显示韵母,用紫光双拼方案的映射表标注。这样手指在 Colemak 布局上,一眼就能找到对应该韵母的键。
完整的 26 键对应关系(紫光/双拼方案):
| 键 | 声母(上) | 韵母(下) |
|---|---|---|
| Q | q | ao |
| W | w | en |
| F | f | ian |
| P | p | ai |
| G | g | iang/uang |
| J | j | iu/er |
| L | l | uan |
| U | zh | — |
| Y | y | in/uai |
| ; | — | ing |
| A | ch | — |
| R | r | an |
| S | s | ang |
| T | t | eng |
| D | d | ie |
| H | h | ong/iong |
| N | n | ui/ue |
| E | e | — |
| I | sh | — |
| O | o | uo |
| Z | z | ou |
| X | x | ia/ua |
| C | c | — |
| V | v | v/ü |
| B | b | iao |
| K | k | ei |
| M | m | un |
可以看到:声母键集中在左手列(U=zh、A=ch、I=sh 竖向排开),韵母分布在各字母键下方,一眼即得。顶行末位补回 ; 键——紫光方案把 ing 放在分号键上。
3. 英文状态自动隐藏双拼提示
双拼提示只在中文输入法激活时显示。当切到英文 IME,字母键上的声母/韵母小标签自动隐藏、字母回中,界面干净。
实现上,在 onInputMethodUpdate 里按输入法语言码判断:languageCode.startsWith("zh") 则显示提示,否则隐藏。
4. 双拼全拼展开上屏
改动了 fcitx5-chinese-addons 子模块,把 PinyinInPreedit 的默认值从 false 改成 true。
效果:双拼输入 h s 时(打字的时候显示的是 h s),上屏的 preedit 变成完整的声母+韵母(如 h ang),而不是原始按键。这让看着 preedit 就能知道实际拼的是什么拼音。
5. 子模块改写与分发
项目本身是多个 git 子模块组成的(fcitx5、libime、fcitx5-chinese-addons 等 20+ 个)。这次只改了 fcitx5-chinese-addons 这一个子模块(pinyin.h 的一行默认值)。为了让别人 clone 主仓库后能完整构建,做了两件事:
- 把改动的子模块 commit 推到个人 fork
xtccc/fcitx5-chinese-addons; - 主编里通过
.gitmodules把这个子模块的 URL 指到个人 fork,其他 19 个子模块仍用官源 URL 自动拉取。
这样 git clone --recursive 你的 colemak 版本即可复现整套输入法。
构建
环境是 Arch + Nix flake(devShell .#noAS),构建抓到 arm64 调试版:
nix --extra-experimental-features "nix-command flakes" develop .#noAS -c \
'./gradlew :app:assembleDebug -PbuildABI=arm64-v8a --console=plain'
产物在 app/build/outputs/apk/debug/。
小结
这四个改动加起来,得到的是一套Colemak 键位 + 紫光双拼可视化 + 英文自动隐藏 + 全拼展开上屏的 Android 全功能完整输入法。代码、fork、构建命令都在上面,欢迎自取。