android - 在启用 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 服务调用这个方法吗?
解决方案
不幸的是,没有记录其他选项,因此遵循的方法是手动检查用户是否调用了该操作以及是否启用了可访问性服务。
public void onProgressChanged(SeekBar b, int progress, boolean fromUser) {
if (!fromUser) return;
// some logic
if (accessibilityManager.isEnabled && accessibilityManager.isTouchExplorationEnabled) {
fireTheAction();
}
}
推荐阅读
- laravel - 如何在 cPanel 服务器上安装 nuxt?
- javascript - Express 路由器 ID 问题 - 将文本作为 ID 读取
- python - 如何在python中替换n叉树中的节点?
- c++ - OpenGL OSG::Texture 乘法只显示一种颜色
- sql - Redshift - 并发写入 - 如果动态创建查询,则插入不起作用
- mysql - 在 SQL (vertica) 中查找特定行
- python - 从 2 个数据帧(熊猫)中提取 N 个值
- git - 获取 git-lfs 锁使用的用户名的命令?
- facebook - 从 Zapier 中的字符串中删除表情符号
- macos - MacOS 应用程序打包 - 是否有推荐的方法在套件中的相关应用程序之间共享框架