Android平台FireMonkey下TMemo控件异常行为问题求助
我之前也碰到过类似的TMemo在Android平台的输入异常问题,结合你描述的症状和官方工单信息,给你整理几个可行的处理方向:
问题核心表现
先明确下这个共性bug的典型症状,方便后续验证修复效果:
- 编辑文本或按下退格键时,无法将光标定位到文本末尾
- 删除单词部分字母时,原有文本会被陌生内容完全替换
- 当输入内容来自键盘语音听写或输入法候选词时,问题会更加明显
官方工单与版本背景
你提到的RSP-31362和RSP-31134是Embarcadero官方已记录的相同问题,说明这是Delphi 10.4 Sydney(包括patch3)中TMemo控件在Android端的原生bug,并非设备或个别项目的问题。
可行的解决方案
检查官方后续补丁
虽然你已经使用了patch3,但可以登录Embarcadero的开发者平台,查看是否有针对该问题的单独修复补丁或后续累积更新。这类UI控件的输入逻辑问题,有时会在版本迭代中被修复。适配历史修复方案
你提到在Delphi XE 10.1中通过修改pas文件并替换classex.dex解决了类似问题。可以尝试找到Delphi 10.4版本中负责TMemo输入处理的相关单元(比如FMX.Memo.Android.pas或关联的控件实现文件),对比旧版本的修复代码,手动调整后重新编译生成对应的dex文件替换到项目中。注意:修改官方源码存在兼容性风险,建议先在独立测试项目中验证效果,再应用到正式项目。
替换为第三方输入控件
如果暂时无法修复官方TMemo的问题,可以考虑使用第三方的文本输入控件。比如一些基于Android原生EditText封装的Delphi组件,或者开源的富文本输入控件,这类控件往往在输入交互的稳定性上表现更好。临时规避措施
- 对输入内容做预处理:当用户通过语音听写或输入法候选词输入文本后,先将内容转换为纯文本格式(过滤掉可能存在的隐藏格式或特殊字符),再赋值给TMemo。
- 手动控制文本与光标:监听TMemo的
OnChange事件,当检测到异常的文本替换行为时,手动恢复正确的文本内容并设置光标位置,减少异常对用户操作的影响。
测试建议
你已经在多款不同Android版本的设备上复现了问题,这有助于确认修复方案的普适性。在尝试每个方案后,建议在这些设备上逐一测试,确保修复有效且没有引入新的问题。
内容的提问来源于stack exchange,提问作者Gianluca Colombo




