You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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权限与主题配置

    1. 开启无障碍相关权限:在Project Options -> Application -> Permissions中勾选ACCESSIBILITY_SERVICE;
    2. 确保应用使用支持无障碍的主题,避免自定义主题覆盖系统焦点行为(尽量使用默认的Material系列主题)。
  • 调用安卓原生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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 23:15:05