type
Post
status
Published
date
Jun 23, 2025
slug
2025/06/23/Practice-of-Customizing-Fcitx5-Android-Keyboard-Layout-Based-on-the-Modified-Version-by-fxliang
summary
tags
Fcitx5
rime
category
Rime
created days
new update day
icon
password
Created_time
Jun 23, 2025 01:54 PM
Last edited time
Jun 24, 2025 01:14 AM
🔧 背景介绍
众所周知,小企鹅输入法(Fcitx5 for Android,简称 f5a)在体验方面表现优秀,尤其是对 Rime 的支持非常稳定。但有一个长期未解决的问题:官方版本并不支持用户自定义按键布局。
想要自定义键盘(比如调整键位、长按符号、符号面板等),就必须:
- 修改源码;
- 编译生成 APK;
- 安装测试,每次调整都要重复这些步骤。
这不仅耗时耗力,而且门槛较高。
🎉 新发现:支持 JSON 自定义的修改版 f5a
幸运的是,近期由 fxliang 大佬 制作的 f5a 修改版本 实现了键盘布局的 JSON 自定义功能,极大降低了定制成本。
该版本支持读取特定的 JSON 文件,直接控制主键盘布局和长按弹出的符号菜单——无需编译源码!
🚀 快速上手:一步步教你定制键盘
1. 下载修改版 Fcitx5 Android
前往项目发布页下载:
你需要下载两个 APK:
- 主程序(fcitx5-android)
- Rime 插件(fcitx5-rime)

⚠️ 注意:
- 安装之前,请卸载原来的官方版本 f5a!
- 记得提前备份用户数据!
- 导出的数据也可以导入到 fxliang 的版本中使用。
2. 安装完成后,创建配置文件
安装完毕插件之后,打开用户数据目录,新建两个文件
config/PopupPreset.json
与 config/TextKeyboardLayout.json
。代表在 config 目录下新建
PopupPreset.json
(管理长按弹出的符号)与 TextKeyboardLayout.json
(管理主键盘布局)这两个文件。config/PopupPreset.json config/TextKeyboardLayout.json
3. 修改生效方式
在正式修改之前,需要明确提示一下,你的配置文件的生效方式:
每次修改完 JSON 文件后,需要:
- 切换到另一个输入法;
- 再切换回 f5a(梁佬版);
这样 f5a 才会重新加载配置文件,更新键盘布局。
4. 修改定制主键盘
点击查看 TextKeyboardLayout.json
默认示例
[ [ {"type": "AlphabetKey", "main": "Q", "alt": "1"}, {"type": "AlphabetKey", "main": "W", "alt": "2"}, {"type": "AlphabetKey", "main": "E", "alt": "3"}, {"type": "AlphabetKey", "main": "R", "alt": "4"}, {"type": "AlphabetKey", "main": "T", "alt": "5"}, {"type": "AlphabetKey", "main": "Y", "alt": "6"}, {"type": "AlphabetKey", "main": "U", "alt": "7"}, {"type": "AlphabetKey", "main": "I", "alt": "8"}, {"type": "AlphabetKey", "main": "O", "alt": "9"}, {"type": "AlphabetKey", "main": "P", "alt": "0"} ], [ {"type": "AlphabetKey", "main": "A", "alt": "@"}, {"type": "AlphabetKey", "main": "S", "alt": "*"}, {"type": "AlphabetKey", "main": "D", "alt": "+"}, {"type": "AlphabetKey", "main": "F", "alt": "-"}, {"type": "AlphabetKey", "main": "G", "alt": "="}, {"type": "AlphabetKey", "main": "H", "alt": "/"}, {"type": "AlphabetKey", "main": "J", "alt": "#"}, {"type": "AlphabetKey", "main": "K", "alt": "("}, {"type": "AlphabetKey", "main": "L", "alt": ")"} ], [ {"type": "CapsKey"}, {"type": "AlphabetKey", "main": "Z", "alt": "'"}, {"type": "AlphabetKey", "main": "X", "alt": ":"}, {"type": "AlphabetKey", "main": "C", "alt": "\""}, {"type": "AlphabetKey", "main": "V", "alt": "?"}, {"type": "AlphabetKey", "main": "B", "alt": "!"}, {"type": "AlphabetKey", "main": "N", "alt": "~"}, {"type": "AlphabetKey", "main": "M", "alt": "\\"}, {"type": "BackspaceKey"} ], [ {"type": "LayoutSwitchKey", "label": "?123", "subLabel": ""}, {"type": "CommaKey", "weight": 0.1}, {"type": "LanguageKey"}, {"type": "SpaceKey"}, {"type": "SymbolKey", "label": ".", "weight": 0.1}, {"type": "ReturnKey"} ] ]
你可以按以下示例格式进行修改和尝试。JSON 中的 key 值以及对应的具体效果,你可以通过下面的几张截图与演示进行了解。
main
:实际输入内容;
displayText
:按键上显示的文字(可与输入内容不同);
alt
:下滑输入的符号(如数字、符号、在键盘上下角按键显示的小符号);
- 其他类型的按键如
CapsKey
、BackspaceKey
等代表特殊功能键。
在这里我进行了两种的修改测试,一种是修改
main
一种是修改 displayText
。- 修改 main,这个时候上屏的就是
木
修改
main
key
切换输入法触发配置加载

上屏测试
- 修改
displayText
只影响显示,不影响实际按键发送的值。
修改
displayText

切换输入法重载配置

上屏测试
5. 修改定制长按弹出
注意:弹出是区分大小写的,如果你修改后发现没有生效,请确认是否修改了正确的部分!
点击查看 PopupPreset.json
默认示例
{ "q": ["1", "Q", "ɋ"], "w": ["2", "W"], "e": ["3", "E", "ê", "ë", "ē", "é", "ě", "è", "ė", "ę", "ȩ", "ḝ", "ə"], "r": ["4", "R", "$"], "t": ["5", "T", "%"], "y": ["6", "Y", "ÿ", "ұ", "ү", "ӯ", "ў"], "u": ["7", "&", "U", "û", "ü", "ū", "ú", "ǔ", "ù"], "i": ["8", "I", "î", "ï", "ī", "í", "ǐ", "ì", "į", "ı"], "o": ["9", "O", "ô", "ö", "ō", "ó", "ǒ", "ò", "œ", "ø", "õ"], "p": ["0", "P"], "a": ["@", "A", "â", "ä", "ā", "á", "ǎ", "à", "æ", "ã", "å"], "s": ["*", "S", "ß", "ś", "š", "ş"], "d": ["+", "D", "ð"], "f": ["-", "F", "_"], "g": ["=", "G", "ğ"], "h": ["/", "H"], "j": ["#", "J"], "k": ["(", "[", "{", "K"], "l": [")", "]", "}", "L", "ł"], "z": ["'", "Z", "`", "ž", "ź", "ż"], "x": [":", "X", "×", ";"], "c": ["\"", "|", "C", "ç", "ć", "č"], "v": ["?", "V", "¿", "ü", "ǖ", "ǘ", "ǚ", "ǜ"], "b": ["!", "B", "¡"], "n": ["~", "N", "ñ", "ń"], "m": ["\\", "M"], "Q": ["1", "q"], "W": ["2", "w"], "E": ["3", "e", "Ê", "Ë", "Ē", "É", "È", "Ė", "Ę", "Ȩ", "Ḝ", "Ə"], "R": ["4", "r"], "T": ["5", "t"], "Y": ["6", "y", "Ÿ", "Ұ", "Ү", "Ӯ", "Ў"], "U": ["7", "&", "u", "Û", "Ü", "Ù", "Ú", "Ū"], "I": ["8", "i", "Î", "Ï", "Í", "Ī", "Į", "Ì"], "O": ["9", "o", "Ô", "Ö", "Ò", "Ó", "Œ", "Ø", "Ō", "Õ"], "P": ["0", "p"], "A": ["@", "a", "Â", "Ä", "Ā", "Á", "À", "Æ", "Ã", "Å"], "S": ["*", "s", "ẞ", "Ś", "Š", "Ş"], "D": ["+", "d", "Ð"], "F": ["-", "f", "_"], "G": ["=", "g", "Ğ"], "H": ["/", "h"], "J": ["#", "j"], "K": ["(", "k"], "L": [")", "l", "Ł"], "Z": ["'", "z", "`", "Ž", "Ź", "Ż"], "X": [":", "x"], "C": ["\"", "c", "Ç", "Ć", "Č"], "V": ["?", "v"], "B": ["!", "b", "¡"], "N": ["~", "n", "Ñ", "Ń"], "M": ["\\", "m"], "г": ["ғ"], "е": ["ё"], "и": ["ӣ", "і"], "й": ["ј"], "к": ["қ", "ҝ"], "н": ["ң", "һ"], "о": ["ә", "ө"], "ч": ["ҷ", "ҹ"], "ь": ["ъ"], "Г": ["Ғ"], "Е": ["Ё"], "И": ["Ӣ", "І"], "Й": ["Ј"], "К": ["Қ", "Ҝ"], "Н": ["Ң", "Һ"], "О": ["Ә", "Ө"], "Ч": ["Ҷ", "Ҹ"], "Ь": ["Ъ"], "ا": ["أ", "إ", "آ", "ء"], "ب": ["پ"], "ج": ["چ"], "ز": ["ژ"], "ف": ["ڤ"], "ك": ["گ"], "ل": ["لا"], "ه": ["ه"], "و": ["ؤ"], "ג": ["ג׳"], "ז": ["ז׳"], "ח": ["ח׳"], "צ׳": ["צ׳"], "ת": ["ת׳"], "י": ["ײַ"], "ח": ["ױ"], "ו": ["װ"], "0": ["∅", "ⁿ", "⁰"], "1": ["¹", "½", "⅓", "¼", "⅕", "⅙", "⅐", "⅛", "⅑", "⅒"], "2": ["²", "⅖", "⅔"], "3": ["³", "⅗", "¾", "⅜"], "4": ["⁴", "⅘", "⅝", "⅚"], "5": ["⁵", "⅝", "⅚"], "6": ["⁶"], "7": ["⁷", "⅞"], "8": ["⁸"], "9": ["⁹"], ".": [",", "?", "!", ":", ";", "_", "%", "$", "^", "&"], "-": ["—", "–", "·"], "?": ["¿", "‽"], "'": ["‘", "’", "‚", "›", "‹"], "!": ["¡"], "\"": ["“", "”", "„", "»", "«"], "/": ["÷"], "#": ["№"], "%": ["‰", "℅"], "^": ["↑", "↓", "←", "→"], "+": ["±"], "<": ["≤", "«", "‹", "⟨"], "=": ["∞", "≠", "≈"], ">": ["≥", "»", "›", "⟩"], "°": ["′", "″", "‴"], "$": ["¢", "€", "£", "¥", "₹", "₽", "₺", "₩", "₱", "₿"], "🤚": ["✋🏻", "✋🏼", "✋🏽", "✋🏾", "✋🏿"] }
📌 小结
fxliang 的这个改动非常实用,让 Android 上的 Fcitx5 输入法第一次具备了“无需编译即可自定义键盘布局”的能力。对于重度输入法用户、自定义需求较高的 Rime 用户来说,是一个质的提升。
建议结合 Rime 的同步机制(例如导入包工具)和这个修改版的键盘定制,一起使用,打造一个完全可控、高度定制的移动输入体验。
感谢
非常感谢 fxliang 佬的改版项目
欢迎加入“喵星计算机技术研究院”,原创技术文章第一时间推送。

- 作者:tangcuyu
- 链接:https://expoli.tech/articles/2025/06/23/Practice-of-Customizing-Fcitx5-Android-Keyboard-Layout-Based-on-the-Modified-Version-by-fxliang
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章