Delphi安卓应用TalkBack无障碍测试焦点异常问题求助
Delphi安卓应用无障碍焦点问题(TalkBack/自动化测试)解决方案
针对你遇到的TalkBack无法聚焦按钮、自动化测试焦点停留在窗体的问题,可按以下步骤排查修复:
手动配置控件无障碍属性
Delphi的FMX控件默认可能未正确初始化无障碍元数据,导致TalkBack和自动化工具无法识别。给每个TButton设置AccessibleName和AccessibleRole:procedure TForm1.FormCreate(Sender: TObject); begin Button1.AccessibleName := '操作按钮1'; Button1.AccessibleRole := akButton; Button2.AccessibleName := '操作按钮2'; Button2.AccessibleRole := akButton; end;确保控件可聚焦且优先获取焦点
检查按钮的TabStop属性是否设为True,Enabled属性是否为True。同时在窗体初始化时强制让第一个按钮获取焦点,避免窗体抢占焦点:procedure TForm1.FormCreate(Sender: TObject); begin // 先设置无障碍属性,再聚焦 Button1.SetFocus; end;修复安卓Manifest权限与主题配置
- 开启无障碍相关权限:在Project Options -> Application -> Permissions中勾选
ACCESSIBILITY_SERVICE; - 确保应用使用支持无障碍的主题,避免自定义主题覆盖系统焦点行为(尽量使用默认的
Material系列主题)。
- 开启无障碍相关权限:在Project Options -> Application -> Permissions中勾选
调用安卓原生API强制设置焦点
若FMX的SetFocus无效,可直接调用安卓原生View的焦点方法:uses Androidapi.JNI.View, Androidapi.JNI.GraphicsContentViewText, FMX.Platform.Android; procedure SetButtonNativeFocus(Button: TButton); var NativeView: JView; begin if Button <> nil and Button.GetObject is JView then begin NativeView := JView(Button.GetObject); NativeView.requestFocus; // 触发焦点变化通知,让无障碍框架感知 NativeView.sendAccessibilityEvent(JAccessibilityEvent.TYPE_VIEW_FOCUSED); end; end; // 在FormCreate中调用 SetButtonNativeFocus(Button1);测试极简项目验证
新建一个仅包含两个TButton的空白项目,按上述步骤配置后再测试TalkBack,排除其他代码或组件的干扰。
内容的提问来源于stack exchange,提问作者Daniel Rossi
相关产品推荐
相关产品推荐

