
(请放大仔细看一下,目前辅助功能实现的)
背景
1、 华为手机 ,鸿蒙4.0.0
2、 小说内容页面时,已经打开了全面屏
3、 需要上划才能呼叫出导航条
需解决
1、 实现一个覆盖导航条的 导航 。
困难
1、 全面屏时,用户上划呼叫出导航条,软件如何快速发现并覆盖
2、 针对对不同的导航条(多功能,home,返回 键排列不一样) 如何识别
3、 如何让输入法正常调起

(请放大仔细看一下,目前辅助功能实现的)
背景
1、 华为手机 ,鸿蒙4.0.0
2、 小说内容页面时,已经打开了全面屏
3、 需要上划才能呼叫出导航条
需解决
1、 实现一个覆盖导航条的 导航 。
困难
1、 全面屏时,用户上划呼叫出导航条,软件如何快速发现并覆盖
2、 针对对不同的导航条(多功能,home,返回 键排列不一样) 如何识别
3、 如何让输入法正常调起
关注引自强大而免费的微信小程序:皆我百晓生。
1、实现一个覆盖导航条的导航需要使用WindowManager来添加一个透明的覆盖视图,并将其设置在导航栏的位置上。由于是涉及系统级别的权限,需要在AndroidManifest.xml中声明SYSTEM_ALERT_WINDOW权限。
2、针对不同的导航条,可以使用AccessibilityService来监听系统UI变化,当导航条出现时,通过获取导航条的布局信息和子控件信息,识别出不同的导航条类型和排列方式。可以根据导航条的类型,调整覆盖导航的布局结构和显示方式。
需要使用AccessibilityService来监听系统UI变化,可以参考以下代码示例:
public class MyAccessibilityService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
// 获取当前窗口的根节点
AccessibilityNodeInfo rootInfo = getRootInActiveWindow();
if (rootInfo != null) {
// 获取导航条信息,根据其布局和子控件信息来判断导航条类型和排列方式
AccessibilityNodeInfo navBarInfo = findNavBar(rootInfo);
if (navBarInfo != null) {
// 处理导航条信息
handleNavBar(navBarInfo);
}
}
}
@Override
public void onInterrupt() {
// 中断服务时的操作
}
private AccessibilityNodeInfo findNavBar(AccessibilityNodeInfo rootNode) {
// 找到导航条节点的逻辑
// 遍历rootNode,找到导航条的节点
// 返回导航条的节点
}
private void handleNavBar(AccessibilityNodeInfo navBarInfo) {
// 处理导航条的逻辑
// 根据导航条的类型和排列方式来决定覆盖导航的布局和显示方式
}
}
在handleNavBar方法中,可以根据导航条的类型和排列方式,动态调整覆盖导航的布局结构和显示方式。可以使用WindowManager来添加一个透明的覆盖视图,并将其设置在导航栏的位置上。