使用 drawingOrder 属性选择相同 ID 元素 | 无障碍点击实现指南
使用 drawingOrder 属性选择相同 ID 元素
如果有多个相同 ID 的元素,可以通过指定 drawingOrder 来指定要操作的元素。例如,假设有两个 ID 为 'myID' 的元素,但是它们的 drawingOrder 分别为 0 和 1,可以使用以下代码来操作 drawingOrder 为 1 的元素:
var myElement = document.querySelector('#myID[drawingOrder='1']');
这将返回 drawingOrder 为 1 的 ID 为 'myID' 的元素。
在安卓中使用无障碍点击
在安卓中,可以使用 AccessibilityService 来实现无障碍点击。具体步骤如下:
- 在 AndroidManifest.xml 文件中声明 AccessibilityService:
<service android:name=".MyAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<meta-data android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>
- 创建 AccessibilityService 类 MyAccessibilityService,并重写 onAccessibilityEvent 方法:
public class MyAccessibilityService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
// 获取事件类型和包名
int eventType = event.getEventType();
String packageName = String.valueOf(event.getPackageName());
// 如果是点击事件,执行点击操作
if (eventType == AccessibilityEvent.TYPE_VIEW_CLICKED) {
performClick(event.getSource());
}
}
@Override
public void onInterrupt() {
}
// 执行点击操作
private void performClick(AccessibilityNodeInfo nodeInfo) {
if (nodeInfo != null) {
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
}
- 创建 accessibility_service_config.xml 文件,配置 AccessibilityService:
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description"
android:accessibilityEventTypes="typeViewClicked"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault"
android:canRetrieveWindowContent="true"
android:canRequestFilterKeyEvents="true"
android:settingsActivity=".MyAccessibilityServiceSettingsActivity" />
- 在 MyAccessibilityService 中实现 performGlobalAction 方法,用于执行全局操作:
@Override
public boolean performGlobalAction(int action) {
switch (action) {
case AccessibilityService.GLOBAL_ACTION_BACK:
// 执行返回操作
performBack();
break;
case AccessibilityService.GLOBAL_ACTION_HOME:
// 执行返回主界面操作
performHome();
break;
case AccessibilityService.GLOBAL_ACTION_RECENTS:
// 打开最近使用的应用程序列表
performRecentApps();
break;
}
return true;
}
// 执行返回操作
private void performBack() {
performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
}
// 执行返回主界面操作
private void performHome() {
performGlobalAction(AccessibilityService.GLOBAL_ACTION_HOME);
}
// 打开最近使用的应用程序列表
private void performRecentApps() {
performGlobalAction(AccessibilityService.GLOBAL_ACTION_RECENTS);
}
- 在应用程序中启动 AccessibilityService:
Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivity(intent);
在 AccessibilityService 设置界面中,启用 MyAccessibilityService 即可使用无障碍点击功能。
原文地址: https://www.cveoy.top/t/topic/jusV 著作权归作者所有。请勿转载和采集!