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

候选框悬浮窗模式下,候选窗口无法跟随光标焦点 #561

Closed yanhuacuo closed 2 years ago

yanhuacuo commented 2 years ago

以下所有反馈,全部基于早期(今年2月份)版本表现正常,而当前版本表现异常。

基于当前版本的 trime.yaml ,作局部改造,以期获取正常的「候选框悬浮窗」,这个对于安卓平板外接键盘打字非常重要。

改造后的文件:新的 trime.yaml

涉及到的代码:

style:
  auto_caps: false #自動句首大寫:true|false|ascii
  background_dim_amount: 0.5
  candidate_font: 98WB-1.otf #候選字型
  candidate_padding: 5 #候選項內邊距
  candidate_spacing: 0.5 #候選間距
  candidate_text_size: 22 #候選字號
  candidate_use_cursor: true #高亮候選項
  candidate_view_height: 28 #候選區高度
  color_scheme: default #配色方案
  comment_font: 98WB-1.otf #編碼提示字型
  comment_height: 12 #編碼提示區高度
  comment_on_top: true #編碼提示在上方或右側
  comment_text_size: 12 #編碼提示字號
  hanb_font: 98WB-1.otf #擴充字型
  horizontal: true #水平模式
  horizontal_gap: 1 #鍵水平間距
  keyboard_padding: 0 #竖屏模式下,屏幕左右两侧与键盘的距离(曲面屏减少误触)
  keyboard_padding_left: 0 #竖屏屏模式下,左手键盘布局,屏幕左侧与键盘的距离
  keyboard_padding_right: 40 #竖屏屏模式下,左手键盘布局,屏幕右侧与键盘的距离
  keyboard_padding_bottom: 0 #竖屏模式下,屏幕下边缘与键盘的距离(避免误触发全面屏手势)
  keyboard_padding_land: 40 #横屏模式下,屏幕左右两侧与键盘的距离(避免横屏按键过度拉伸变形)
  keyboard_padding_land_bottom: 0 #横屏模式下,屏幕下侧与键盘的距离
  layout: #懸浮窗口設置
    position: right #位置:left|right|left_up|right_up|fixed|bottom_left|bottom_right|top_left|top_right(left、right需要>=Android5.0)
    min_length: 1 #最小詞長
    max_length: 10 #超過字數則換行
    sticky_lines: 1 #固頂行數
    max_entries: 9 #最大詞條數
    min_check: 1 #只要前n个候选词有长度大于等于min_length的词,就会把长度符合以及之前的词全部加到悬浮窗内。
    all_phrases: true #所有滿足條件的詞語都顯示在窗口
    border: 2 #邊框寬度
    max_width: 1000 #最大寬度,超過則自動換行
    max_height: 800 #最大高度
    min_width: 40 #最小寬度
    min_height: 0 #最小高度
    margin_x: 5 #水平邊距
    margin_y: 5 #豎直邊距
    margin_bottom: 0 #底部边距 (用于适配特定背景图)
    real_margin: 3 #屏幕左右边缘和悬浮窗之间的距离
    line_spacing: 0 #候选詞的行間距(px)
    line_spacing_multiplier: 1.0 #候选詞的行間距(倍數)
    spacing: 1 #與預編輯或邊緣的距離
    round_corner: 12 #窗口圓角
    alpha: 0xdd #透明度(0-255)
    elevation: 5 #陰影(>=Android5.0)
    movable: once #是否可移動窗口,或僅移動一次 true|false|once
  window: #悬浮窗口組件
    - {start: "", composition: "%s", end: "", letter_spacing: 0, end: " "} #letter_spacing需要Android5.0。TODO: 不为0时,会导致不换行的问题
    - {start: "\n", label: "%s.", candidate: "%s", comment: " %s", end: " ", sep: "\n"}  #label: "%s.", 序号;start: "\n", 换行
  key_font: symbol.ttf #鍵盤字型
  key_height: 44 #鍵高
  key_long_text_size: 14 #長標籤字號
  key_text_size: 22 #鍵字號
  key_width: 10.0 #鍵寬,佔螢幕寬的百分比
  keyboards: [.default, letter, number, symbols] #鍵盤配置:自動鍵盤、字母、數字、符號
  label_text_size: 22 #標籤字號
  label_font: label.ttf #編標籤字型
  latin_font: latin.ttf #西文字型
  latin_locale: en_US #西文語言
  locale: zh_TW #預設語言 zh_TW,zh_CN,zh_HK,""
  preview_font: latin.ttf #按鍵提示字型
  preview_height: 60 #按鍵提示高度
  preview_offset: -12 #按鍵提示縱向偏移
  preview_text_size: 40 #按鍵提示字號
  proximity_correction: true #按鍵糾錯
  reset_ascii_mode: false #顯示鍵盤時重置爲中文狀態
  round_corner: 8 #按鍵圓角半徑
  shadow_radius: 0.0 #按鍵陰影半徑
  speech_opencc_config: s2t.json #語音輸入簡繁轉換
  symbol_font: symbol.ttf #符號字型
  symbol_text_size: 10 #符號字號
  text_font: 98WB-1.otf #編碼字型
  #text_height: 22 #編碼區高度
  text_size: 16 #編碼區字號
  vertical_correction: 0
  vertical_gap: 1 #鍵盤行距
  long_text_font: comment.ttf #剪贴板等可能包含大段文本使用的字体
  #background_folder: #背景图保存在background目录下的哪个子目录
  key_long_text_border: 1

PIC

yanhuacuo commented 2 years ago

另外,这个版本还有一个问题,只要涉及「trime.yaml」的改动,部署后必定强行 FC

我测试的手机是 MIUI 12.5 ,基于安卓11 ,同样地,旧版同文无此问题。而且候选框悬浮窗正常。

yanhuacuo commented 2 years ago

请求重视这个较为影响使用的问题。

yanhuacuo commented 2 years ago

冒泡看看 :)

yanhuacuo commented 2 years ago

功能键字体显示偏大,悬浮窗光标定位不准……影响使用。

yanhuacuo commented 2 years ago

期待修复该问题

yanhuacuo commented 2 years ago

冒泡看看 :)

yanhuacuo commented 2 years ago

冒泡看看 :)

yanhuacuo commented 2 years ago

应该是新的改动引入了这个问题,旧的版本没有定位飘移的现象。

iovxw commented 2 years ago

这里 Artifacts 里的 apk 应该就是已经修好的了

yanhuacuo commented 2 years ago

这里 Artifacts 里的 apk 应该就是已经修好的了

这里 Artifacts 里的 apk 应该就是已经修好的了

悬浮窗在自带的手机浏览器(miui)或firefox手机版中,还是定位不准。另外,悬浮窗中的opencc注解也不见了。(总之,情况是更糟了:))

iovxw commented 2 years ago

悬浮窗在自带的手机浏览器(miui)或firefox手机版中,还是定位不准。

无法复现,是在浏览器地址栏之类浏览器本身控件上定位不准还是网页中输入框定位不准?

具体是什么网页?旧版本可以定位吗?

另外,悬浮窗中的opencc注解也不见了。(总之,情况是更糟了:))

这应该都是之前的重构所引入的(并不是由我实现,所以我还需要一些时间来读代码),请单独开一个 issue 描述问题(不同的问题尽量拆开创建 issue,方便进行追踪和修复)

yanhuacuo commented 2 years ago

悬浮窗在自带的手机浏览器(miui)或firefox手机版中,还是定位不准。

无法复现,是在浏览器地址栏之类浏览器本身控件上定位不准还是网页中输入框定位不准?

具体是什么网页?旧版本可以定位吗?

另外,悬浮窗中的opencc注解也不见了。(总之,情况是更糟了:))

这应该都是之前的重构所引入的(并不是由我实现,所以我还需要一些时间来读代码),请单独开一个 issue 描述问题(不同的问题尽量拆开创建 issue,方便进行追踪和修复)

关于定位不准

比如手机浏览器打开 github 这里(此时回复)的comment 输入框,手机浏览器中的百度主页搜索框等等网页中的输入框都是定位不准的。

opencc 注解消失

发这个 issue 时,悬浮控件还能显示 opencc注解,由于一直没有下文,没有跟进新的版本,不知是何时引入的这个新bug。

yanhuacuo commented 2 years ago

3月份的旧版是正常的

yanhuacuo commented 2 years ago

pic

yanhuacuo commented 2 years ago

引入一款别的主题并切到该主题,再切回默认主题,opencc注解回来了。不过网页中的输入框依然是飘的,不能像三月份的旧版那样准确定位。

iovxw commented 2 years ago

可能是因为在浏览器内无法获取到嵌入式编辑内容的信息,然后之前的重构把这部分的逻辑搞坏了,现在我修了你再试试?

https://github.com/iovxw/trime-1/actions/runs/1495787715

引入一款别的主题并切到该主题,再切回默认主题,opencc注解回来了

重启手机后 opencc 的注解还在吗?opencc 的版本有升级,可能需要重新部署以及重启 trime(现在 trime 的部署后自动重启是坏的)

yanhuacuo commented 2 years ago

可能是因为在浏览器内无法获取到嵌入式编辑内容的信息,然后之前的重构把这部分的逻辑搞坏了,现在我修了你再试试?

https://github.com/iovxw/trime-1/actions/runs/1495787715

引入一款别的主题并切到该主题,再切回默认主题,opencc注解回来了

重启手机后 opencc 的注解还在吗?opencc 的版本有升级,可能需要重新部署以及重启 trime(现在 trime 的部署后自动重启是坏的)

这个版本的「悬浮窗候选栏」,我自己从前用的小鹤主题可以正常跟随光标焦点了,而默认的 trime.yaml 依然不能,主题参数方面的问题可以排除,因为在别的app中,它们的表现都一样正常。

既然第三方主题的悬浮窗已经正常,这个问题已经解决大半了,trime.yaml 改造的悬浮窗不能用,这个无法理解,它们的工作原理本是一样的。

第一时间就收到并测试了,但是我花了十多分钟来唤醒新装的同文,包括杀进程,重启手机数次……

https://github.com/osfans/trime/issues/603

yanhuacuo commented 2 years ago

可能是因为在浏览器内无法获取到嵌入式编辑内容的信息,然后之前的重构把这部分的逻辑搞坏了,现在我修了你再试试?

https://github.com/iovxw/trime-1/actions/runs/1495787715

引入一款别的主题并切到该主题,再切回默认主题,opencc注解回来了

重启手机后 opencc 的注解还在吗?opencc 的版本有升级,可能需要重新部署以及重启 trime(现在 trime 的部署后自动重启是坏的)

opencc 的『ocd2』词典与 『json』文件都是没问题的,因为取消悬浮窗时,显示完全正常,第三方主题,显示也完全正常。仅在 trime.yaml 这里,改造成『悬浮候选』后,opencc 注解不显示,需要切走到别的主题下,再切回到 trime.yaml 中一次,trime.yaml 才能显示出来本该存在的 opencc 注解。

可是,虽然此时 trime.yaml 已经符合预期,但是重启一次手机后,开机唤醒无响应,卡死,杀进程,部署,等待数分钟,唤醒后 opencc 再次消失,切走、切回、治愈——流程要重走一遍。

yanhuacuo commented 2 years ago

一个典型的,网页中带评论框的博客,供测试:https://98wb.github.io/message/

iovxw commented 2 years ago

https://github.com/osfans/trime/actions/runs/1500359751

重写了一下相关逻辑,现在旧版本能定位的悬浮窗应该都能定位,旧版本不能定位的一部分也能定位了

一些有问题的地方:

现在一切行为先以直接启动 trime 为基准,就不用测试切换主题的影响了

你先试一下上面的 apk,没有问题的话我会先合并窗口定位相关的修复,然后去修其他 issue

yanhuacuo commented 2 years ago

感谢修复

在手机自带的 chrome 加壳浏览器中,悬浮窗完全正常。 在 firefox 中,也能光标跟随,但是打过几个字后,随即就会出现『悬浮窗假死』,无响应。

切换主题后,参数加载不全,候选栏、状态栏的配色有明显没有正确渲染的情况。

这个问题,一直存在,可能也是目前最严重、最亟待解决的事情。

我把这个 issue 关掉了,继续等候大神修复新的同文。