osfans / trime

同文安卓輸入法平臺3.x/Android-rime/Rime Input Method Engine for Android
http://osfans.github.io/trime/
GNU General Public License v3.0
3.08k stars 372 forks source link

键盘字体和尺寸异常 #528

Closed tumuyan closed 2 years ago

tumuyan commented 3 years ago

Describe the bug 在近期的pr中可能存在一些bug,导致不同皮肤的键盘存在不同的异常。

Expected behavior

  1. 按键字体偏大
  2. 按键和间距变大
  3. 由于计算的尺寸有差异,导致同一主题不同键盘布局的高度产生差异

Screenshots 左侧为先前版本,右侧为最新版本。 由上之下,分别是我自己的主题,同文风,默认。

IMG_20210913_203300.jpg

Bambooin commented 3 years ago

可以倒退是那个 commit 引起的,确实有这个问题

tumuyan commented 3 years ago

另外安装新版本后如果是我自己的皮肤,弹出键盘时输入法直接崩溃。换用同文风填色错误,再次应用主题恢复正常,再改回自己的皮肤也正常了。

(KeyboardView.java:753)指向的错误是 keyBackground = (Drawable) getStateDrawable.invoke(mKeyBackColor, index); 这行代码

2021-09-14 21:46:10.356 491-491/com.tumuyan.trime E/KeyboardView: Get Drawable Exception
    java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.osfans.trime.ime.keyboard.KeyboardView.onBufferDraw(KeyboardView.java:753)
        at com.osfans.trime.ime.keyboard.KeyboardView.invalidateKeys(KeyboardView.java:1098)
        at com.osfans.trime.ime.keyboard.KeyboardView.invalidateComposingKeys(KeyboardView.java:1105)
        at com.osfans.trime.ime.core.Trime.updateComposing(Trime.java:1375)
        at com.osfans.trime.ime.core.Trime.showWindow(Trime.java:749)
        at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInput(InputMethodService.java:757)
        at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInputWithToken(InputMethodService.java:726)
        at android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:226)
        at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:44)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:236)
        at android.app.ActivityThread.main(ActivityThread.java:8043)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)
     Caused by: java.lang.ArrayIndexOutOfBoundsException: length=10; index=-1
        at android.graphics.drawable.DrawableContainer$DrawableContainerState.getChild(DrawableContainer.java:909)
        at android.graphics.drawable.StateListDrawable.getStateDrawable(StateListDrawable.java:272)
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.osfans.trime.ime.keyboard.KeyboardView.onBufferDraw(KeyboardView.java:753) 
        at com.osfans.trime.ime.keyboard.KeyboardView.invalidateKeys(KeyboardView.java:1098) 
        at com.osfans.trime.ime.keyboard.KeyboardView.invalidateComposingKeys(KeyboardView.java:1105) 
        at com.osfans.trime.ime.core.Trime.updateComposing(Trime.java:1375) 
        at com.osfans.trime.ime.core.Trime.showWindow(Trime.java:749) 
        at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInput(InputMethodService.java:757) 
        at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInputWithToken(InputMethodService.java:726) 
        at android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:226) 
        at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:44) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:236) 
        at android.app.ActivityThread.main(ActivityThread.java:8043) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011) 
2021-09-14 21:46:10.356 491-491/com.tumuyan.trime D/AndroidRuntime: Shutting down VM
yanhuacuo commented 3 years ago

新版本中,旧主题,几乎全不可用了。

tumuyan commented 3 years ago

新版本中,旧主题,几乎全不可用了。

我使用默认和同文风倒是至少能用…

rainhear commented 3 years ago

@walk143 在同文 QQ 群發佈了基於新近版本編譯的安裝包,體驗過程中暫時發現如下問題:


1. 風格 下游節點中部分配置項失效

需至鍵盤佈局中單獨定義:

style:
  horizontal_gap: 4 # 按鍵列距
  vertical_gap: 4 # 按鍵行距
  round_corner: 12 # 按鍵圓角半徑
  key_text_size: 20 # 按鍵文本字號
  key_long_text_size: 18 # 長文本字號
  symbol_text_size: 10 # 符號字號
preset_keyboards:
  default:
    horizontal_gap: 4
    vertical_gap: 4
    keys:
      - {click: space, ascii: spacex, long_click: Mode_switch, round_corner: 12, key_text_size: 20, key_long_text_size: 18, symbol_text_size: 10, width: 30}

2. 新版個人主題需增設 備用顏色配置 下游節點

# 備用顏色機制
fallback_colors:
  root_background: back_color # 鍵盤與候選欄基底背景
  candidate_background: back_color # 候選欄背景
  liquid_keyboard_background: keyboard_back_color # 液態鍵盤背景
  long_text_back_color: key_back_color # 剪貼板按鍵背景
  hand_writing_color: key_symbol_color # 手寫筆跡
# 顏色配置
colors:
  # 01_starry 星光
  11: &color11 0xff00aacc # 藍
  12: &color12 0xff009999 # 青
  13: &color13 0xffdd0077 # 玫
  14: &color14 0xffc03000 # 橙
  15: &color15 0xff000000 # 黑
  16: &color16 0xff0a1018 # 夜藍
  17: &color17 0xff1c1c1c # 夜黑
  18: &color18 0xdd001530 # 透藍

# 配色方案
preset_color_schemes:
  01_starry:
    name: 星光 # 方案名稱
    author: 聽雨客 # 作者信息

    border_color: *color12 # 邊框
    text_back_color: *color16 # 浮動窗背景
    back_color: *color16 # 編碼背景
    text_color: *color11 # 編碼文本
    hilited_back_color: *color16 # 高亮編碼背景
    hilited_text_color: *color13 # 高亮編碼文本

    candidate_background: *color16 # 候選欄背景
    label_color: *color12 # 序號標籤
    candidate_text_color: *color13 # 候選文本
    comment_text_color: *color12 # 編碼提示
    hilited_candidate_back_color: *color15 # 高亮候選背景
    hilited_label_color: *color14 # 高亮序號標籤
    hilited_candidate_text_color: *color11 # 高亮候選文本
    hilited_comment_text_color: *color14 # 高亮編碼提示
    candidate_separator_color: *color16 # 候選分隔

    root_background: *color16 # 鍵盤與候選欄基底背景
    keyboard_back_color: *color17 # 鍵盤背景
    key_back_color: *color15 # 按鍵背景
    key_text_color: *color11 # 按鍵文本
    key_symbol_color: *color12 # 按鍵符號
    hilited_key_back_color: *color14 # 高亮按鍵背景
    hilited_key_text_color: *color15 # 高亮按鍵文本
    hilited_key_symbol_color: *color17 # 高亮按鍵符號
    off_key_back_color: *color16 # 功能鍵關閉狀態背景
    off_key_text_color: *color13 # 功能鍵關閉狀態文本
    on_key_back_color: *color14 # 功能鍵開啟狀態背景
    on_key_text_color: *color15 # 功能鍵開啟狀態文本
    hilited_off_key_back_color: *color12 # 高亮功能鍵關閉狀態背景
    hilited_off_key_text_color: *color15 # 高亮功能鍵關閉狀態文本
    hilited_on_key_back_color: *color12 # 高亮功能鍵開啟狀態背景
    hilited_on_key_text_color: *color15 # 高亮功能鍵開啟狀態文本
    preview_back_color: *color18 # 按鍵預覽背景
    preview_text_color: *color13 # 按鍵預覽文本
    # shadow_color: *color11 # 按鍵陰影

    liquid_keyboard_background: *color17 # 液態鍵盤背景
    long_text_back_color: *color15 # 剪貼板按鍵背景
    hand_writing_color: *color11 # 手寫筆跡

3. 鍵盤佈局下游節點各項 偏移值 配置項失效

僅能在局部按鍵中單獨定義:

preset_keyboards:
  default:
    key_text_offset_x: 5 # 按鍵文本橫向偏移量(左負右正)
    key_text_offset_y: 5 # 按鍵文本縱向偏移量(上負下正)
    key_symbol_offset_x: 5 # 按鍵符號橫向偏移量(左負右正)
    key_symbol_offset_y: 5 # 按鍵符號縱向偏移量(上負下正)
    key_hint_offset_x: 5 # 按鍵助記橫向偏移量(左負右正)
    key_hint_offset_y: 5 # 按鍵助記縱向偏移量(上負下正)
    key_press_offset_x: 5 # 高亮按鍵文本橫向偏移量(左負右正)
    key_press_offset_y: 5 # 高亮按鍵文本縱向偏移量(上負下正)
preset_keyboards:
  default:
    keys:
      - {click: q, long_click: '~', key_text_offset_x: 5, key_text_offset_y: 5, key_symbol_offset_x: 5, key_symbol_offset_y: 5, key_hint_offset_x: 5, key_hint_offset_y: 5, key_press_offset_x: 5, key_press_offset_y: 5}
rainhear commented 3 years ago

有關單手模式節點配置的小想法

# 界面風格、功能開關
style:
  # 豎屏模式,左手鍵盤佈局,鍵盤與屏幕左邊緣的內填充
  # 若配置右手佈局,則本節點視為填充更少的一側
  keyboard_padding_left: 5

  # 豎屏模式,左手鍵盤佈局,鍵盤與屏幕右邊緣的內填充
  # 若配置右手佈局,則本節點視為填充更多的一側
  keyboard_padding_right: 40
tumuyan commented 3 years ago
  • 整體而言無論左右手佈局,

    • keyboard_padding_left 的值都得是小,
    • keyboard_padding_rhght 的值都得是大。
  • 所以配置右手佈局,這麼看節點名就不直觀了,按功能角度聲明節點,
  • 可能 keyboard_padding_lesskeyboard_padding_more 更貼切一些

单手键盘虽然设计了左右手互换,其实一般人也只用一侧,根据需求参数中左侧改大右边改大就可以了。叫left和right也算直观,和其他几个参数命名方式也相似,就不改了。

walk143 commented 3 years ago
  • 整體而言無論左右手佈局,

    • keyboard_padding_left 的值都得是小,
    • keyboard_padding_rhght 的值都得是大。
  • 所以配置右手佈局,這麼看節點名就不直觀了,按功能角度聲明節點,
  • 可能 keyboard_padding_lesskeyboard_padding_more 更貼切一些

单手键盘虽然设计了左右手互换,其实一般人也只用一侧,根据需求参数中左侧改大右边改大就可以了。叫left和right也算直观,和其他几个参数命名方式也相似,就不改了。

原来left和right是为了左右边距分开设置,这属于避免曲面屏而设计的,左右手就不应该复用。less和more新增一个配置项才对

tumuyan commented 3 years ago
  • 整體而言無論左右手佈局,

    • keyboard_padding_left 的值都得是小,
    • keyboard_padding_rhght 的值都得是大。
  • 所以配置右手佈局,這麼看節點名就不直觀了,按功能角度聲明節點,
  • 可能 keyboard_padding_lesskeyboard_padding_more 更貼切一些

单手键盘虽然设计了左右手互换,其实一般人也只用一侧,根据需求参数中左侧改大右边改大就可以了。叫left和right也算直观,和其他几个参数命名方式也相似,就不改了。

原来left和right是为了左右边距分开设置,这属于避免曲面屏而设计的,左右手就不应该复用。less和more新增一个配置项才对

没有复用,参见wiki

walk143 commented 3 years ago
  keyboard_padding: 20 #竖屏模式下,屏幕左右两侧与键盘的距离(曲面屏减少误触)
  keyboard_padding_left: 5 #竖屏模式下,屏幕左侧与键盘的距离 如定义覆盖 keyboard_padding
  keyboard_padding_right: 0 #竖屏模式下,屏幕右侧与键盘的距离 如定义覆盖 keyboard_paddin

首先默认边距是20.设置了left为5,那左边距就变为5.right为0或者未设置,那右边距就是20. 至于左右手的间距,单独定义一个key来设置。 这里的left和right只是为了曲面屏误解设置的边距,不是左右手键盘的间距

flypyxh commented 3 years ago

对我来说,最大的问题是全局的几个参数无效了,造成我的主键盘高度和符号键盘高度不等。 key_height: FJG #符号键盘键高 vertical_gap: FJH #符号键盘行距 horizontal_gap: *FJL #符号键盘列间距 这是最可怕的,我是用来定义符号键盘的,这样给主键盘定义特别值,再定义全局参数,就完成了。 但全局参数无效,就得给每个键盘定义参数,如果只是一个主题文件倒简单,但我有衍生主题,本来全局键盘定义完成,我就不用再给每个符号键盘打补丁了,现在全局无效,就得给所有符号键盘都加定义。

yanhuacuo commented 3 years ago

对我来说,最大的问题是全局的几个参数无效了,造成我的主键盘高度和符号键盘高度不等。 key_height: FJG #符号键盘键高 vertical_gap: FJH #符号键盘行距 horizontal_gap: *FJL #符号键盘列间距 这是最可怕的,我是用来定义符号键盘的,这样给主键盘定义特别值,再定义全局参数,就完成了。 但全局参数无效,就得给每个键盘定义参数,如果只是一个主题文件倒简单,但我有衍生主题,本来全局键盘定义完成,我就不用再给每个符号键盘打补丁了,现在全局无效,就得给所有符号键盘都加定义。

以前配好的主题,现在都无法用了,字体尺寸错乱,候选条的透明度也没有了。

yanhuacuo commented 2 years ago

冒泡看看,旧主题还是存在着走样的问题,不知什么时候可以修复一下。

yanhuacuo commented 2 years ago

另外,候选栏的底色现在变成强制纯白色,有些怪。

Bambooin commented 2 years ago

新版本部分问题已经修复,除了键盘字体有些大

yanhuacuo commented 2 years ago

新版本部分问题已经修复,除了键盘字体有些大

候选栏的底色还是强制纯白,有点违和

yanhuacuo commented 2 years ago

新版本部分问题已经修复,除了键盘字体有些大

反馈如下:

pic

pic

pic

pic

Bambooin commented 2 years ago

@yanhuacuo 剩下问题能另外开一个 issue 吗?

这个问题算是修复了