键盘布局 - tumuyan/trime-without-CMake GitHub Wiki
我所理解的皮肤
一套皮肤,既决定了用户看到什么、怎样交互,也决定了是否美观。
我对同文皮肤系统的调整,既没有对美观做太多追求,也没有对方便做太多优化。主要在功能的完善上,兼顾看得下去,而默认主题重在让人看明白需要怎么抄作业。
是否美观,最核心的部分,是背景、外框和文字样式。 rime系皮肤,1套皮肤可以内置多种配色方案,缺少的配色透过fallback机制补完,这一点非常精妙,但是也使得皮肤相当复杂——介于这一事实,我在增加参数时做了一些优化。
皮肤的构成
用户看到的普通键盘,由候选词栏和键盘本体两部分构成。液态键盘,由标签栏和键盘本体两部分构成。这两者之间是相互对应的,共用了大部分皮肤参数。 并且,新版本皮肤是由三部分叠加的——最底层为root_background,上层由上方候选词栏的candidate_background和下方键盘区域的keyboard_back_color构成。这一好处是键盘可以使用一张完整的图,图片顶齐到候选栏,而候选栏又可以通过半透明图片的形式进行分割和强调。
layout\min_check
,是悬浮窗显示词数的算法变更(只要前n个候选词有长度大于等于min_length的词,就会把长度符合以及之前的词全部加到悬浮窗内)。
液态键盘
... (在3.2.2之后的版本中)增加了剪贴板管理器、可以快速编辑的符号键盘、符号历史,这些功能全部建立在liquidKeyboard(液态键盘)的基础上。
那么如何调整符号键盘呢?可以说调整符号键盘是前所未有的简单。符号键盘一共有三组参数:
- 尺寸参数
key_height: 40 #按键高度
key_height_land: 40 #横屏模式按键高度
single_width: 60 #single类型的按键宽度
vertical_gap: 1 #纵向按键间隙
margin_x: 0.5 #左右按键间隙的1/2
- tab列表。数组中的每一项对应一个tab,数组的顺序即tab的顺序。如果没有对应的数据,则不显示这个tab。如果同一个tab出现了多次,则显示多次这个tab
keyboards: [emoji, math, ascii, cn, clipboard, history, exit, list , table, symbol, ids , pinyin, jp, unit, exit, grease, rusa, korea, lation, yinbiao, exit] #tab列表
- tab内容。名称和上边的数组内容对应,name即tab显示的文本内容,type即类型,keys即按键列表。当选择NO_KEY类型时,keys解析为命令字符串。SINGLE 类型时,keys解析为按键列表。如果keys的值的属性为字符串,每个字符解析为一个按键;如果为数组,每个元素解析为一个按键。目前支持的type包含:
Type | 说明 |
---|---|
NO_KEY | 只占据tab位,不含keys(如返回键) |
TABS | tab列表(显示为更多 ) |
CLIPBOARD | 剪贴板(大段文本自动缩略,按键长度自适应。) |
COLLECTION | 收藏的文本, 复用剪贴板样式 |
DRAFT | 草稿箱,即文本框编辑历史,复用剪贴板样式 |
CANDIDATE | 候选词,复用候选栏样式 |
HISTORY | 近期上屏符号历史 |
* | 以下类型的键盘,都必须包含keys列表 |
SINGLE | 按键使用固定宽度。单个字符即按键。SINGLE是默认类型的按键 |
VAR_LENGTH | 按键长度不固定,与展开候选的样式相同 |
exit:
name: 返回
type: NO_KEY
keys: EXIT
emoji:
type: SINGLE
keys: "🙂😂🤣😆🙃😅🙈🙉🙊☹😑😄🤐😨😱🌚🌝🤔❤💔♡🌹💣👌👍😣😥😮🙄😏😕😯😪😫😴😌🤑😉😋😎😍😘😚😛😜😝😒😓😔😲😷🤒😇🤓🤗🤕🙁😖😞😟😤😢😭😦😧😨😩😬😰😳😵😡😠☝✌🖕👎🙏🤘👏💪💋☘🍀🌸☕🍵🍺🍻🍦🍬🍚🍜🍲🍖🎂💤"
clipboard:
type: CLIPBOARD
name: 剪贴
history:
name: 最近
type: HISTORY
如何打开关闭liquidKeyboard呢? 在默认键盘布局中,已经设计了开关,点击符号键盘-更多即可打开,点击“候选栏”上的返回即可退出。也可以自行设计按键,直接打开指定的tab。
# 使用如下形式的按键,打开liquidKeyboard的指定标签页。
K_symbols40: {label: 🙂, send: function, command: liquid_keyboard, option: "emoji"}
K_symbols50: {label: 剪贴, send: function, command: liquid_keyboard, option: "剪贴"}
K_symbols60: {label: 更多, send: function, command: liquid_keyboard, option: "9"}
#退出liquidkeyboard
liquid_keyboard_exit: {label: 返回, send: function, command: liquid_keyboard, option: "-1"}
padding和左右手模式、横屏模式
(在3.2.3之后的版本中)为了避免竖屏误触全面屏手势、导航栏,横屏键盘被拉伸极宽、键盘异常丑陋,竖屏曲面屏误触左右两侧按键,增加了键盘整体布局的一系列padding参数。包含:
keyboard_padding: 0 #竖屏模式下,屏幕左右两侧与键盘的距离(曲面屏减少误触)
keyboard_padding_left: 0 #竖屏屏模式下,左手键盘布局,屏幕左侧与键盘的距离
keyboard_padding_right: 40 #竖屏屏模式下,左手键盘布局,屏幕右侧与键盘的距离
keyboard_padding_bottom: 0 #竖屏模式下,屏幕下边缘与键盘的距离(避免误触发全面屏手势)
keyboard_padding_land: 40 #横屏模式下,屏幕左右两侧与键盘的距离(避免横屏按键过度拉伸变形)
keyboard_padding_land_bottom: 0 #横屏模式下,屏幕下侧与键盘的距离
从注释中可以看到,在竖屏模式下,还能通过padding参数设置左右手键盘。主题可以通过设置如下一组开关,快速切换普通,左手,右手三种布局。
one_hand_switch_1: {toggle: _one_hand_mode_1, send: Mode_switch, states: [ 左手, 普通 ]}
one_hand_switch_2: {toggle: _one_hand_mode_2, send: Mode_switch, states: [ 右手, 普通 ]}
one_hand_switch_3: {toggle: _one_hand_mode_3, send: Mode_switch, states: [ 左手, 右手 ]}
键盘高度
在较早的版本中,每个键盘都独立计算键盘高度。当不同键盘高度不一致时,不止产生键盘高度的变化,还会导致屏幕刷新造成的屏幕闪烁。
(在3.2.5后的版本中) 在皮肤中增加键盘高度参数,方便快速调整整个键盘的高度,同时解决了闪烁的问题。增加了如下参数:
style:
keyboard_height: 250 #锁定键盘高度,避免切换时键盘高度变化而造成闪烁
keyboard_height_land: 200 #锁定横屏下键盘高度,避免切换时键盘高度变化而造成闪烁
preset_keyboards:
keyboard_name:
auto_height_index: 0 #哪一行吸收缩放后的余数
针对liquidKeyboard,增加了每屏显示的按键行数的参数。
liquid_keyboard:
row: 6 #每屏最多显示多少行按键
row_land: 5 #横屏每屏最多显示多少行按键
新的键盘尺寸计算方式如下:
- default键盘的高度 = 其他键盘的高度 = liquidKeyboard键盘高度 =
keyboard_height
或keyboard_height_land
的dp值(float,允许小数)转换为px - 当键盘高度与keyboard_height不一致时,每行按键等比例缩放按键高度高度(padding不参与运算);
- 由于高度只能取整数,行之间的间距向上取整数 ,按键高度遵循四舍五入,如存在余数,由 auto_height_index 指定的行吸收 。第一行即0,第二行为1,以此类推;特别的,当值为负数时,为倒序序号(-1即倒数第一个);当值大于按键行数时,为最后一行。
- liquidKeyboard的计算方式相对简易, 按键高度 + 行之间的间距 = 键盘高度 /
row
或row_land
,取整方式参见上一条。
(编辑中...