首页 > 解决方案 > 在启用 Android TalkBack 服务的情况下使用 SeekBar 和 OnSeekBarChangeListener

问题描述

我需要认识到用户已经使用界面中的onStopTrackingTouch回调方法结束了搜索栏进度更改。OnSeekBarChangeListener

每当在正常触摸模式下触发搜索栏进度更改操作时,这都可以正常工作,但是启用 TalkBack 服务后,我不再能够检测到此事件(未触发回调)。这是意料之中的(因为启用辅助功能服务的进度更改不涉及任何屏幕触摸操作),因为文档说明如下:

/**
 * Notification that the user has finished a touch gesture. Clients may want to use this
 * to re-enable advancing the seekbar.
 * @param seekBar The SeekBar in which the touch gesture began
 */
void onStopTrackingTouch(SeekBar seekBar);

在这种情况下,恐怕我需要提取此方法中的逻辑以位于其他位置,并从onProgressChanged方法中有条件地调用它(取决于启用的 TalkBack 服务),例如。

if (accessibilityManager.isEnabled && accessibilityManager.isTouchExplorationEnabled) {
    fireTheAction()
}

我不乐意每次都使用这个 if 语句。有什么办法可以强制 TalkBack 服务调用这个方法吗?

标签: androidaccessibilityseekbartalkback

解决方案


不幸的是,没有记录其他选项,因此遵循的方法是手动检查用户是否调用了该操作以及是否启用了可访问性服务。

public void onProgressChanged(SeekBar b, int progress, boolean fromUser) {
    if (!fromUser) return;
    // some logic

    if (accessibilityManager.isEnabled && accessibilityManager.isTouchExplorationEnabled) {
        fireTheAction();
    }
}

推荐阅读