繁体   English   中英

在启用 Android TalkBack 服务的情况下使用 SeekBar 和 OnSeekBarChangeListener

[英]Using SeekBar and OnSeekBarChangeListener with Android TalkBack service enabled

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

每当在正常触摸模式下触发搜索栏进度更改操作时,这都可以正常工作,但是当启用 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 服务调用这个方法吗?

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

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

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

https://support.google.com/accessibility/android/answer/6006598?hl=zh -CN 要将 slider 与 TalkBack 一起使用,您可以双击并按住,然后向右或向左拖动。 它适用于 slider 的 jetpack compose,我认为它也适用于 SeekBar。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM