windneeded78 2023-12-04 15:33 采纳率: 0%
浏览 17
已结题

Android导航条遮盖异常

img

(请放大仔细看一下,目前辅助功能实现的)

背景
1、 华为手机 ,鸿蒙4.0.0
2、 小说内容页面时,已经打开了全面屏
3、 需要上划才能呼叫出导航条

需解决
1、 实现一个覆盖导航条的 导航 。

困难
1、 全面屏时,用户上划呼叫出导航条,软件如何快速发现并覆盖
2、 针对对不同的导航条(多功能,home,返回 键排列不一样) 如何识别
3、 如何让输入法正常调起

  • 写回答

14条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-12-04 15:38
    关注
    获得0.75元问题酬金

    引自强大而免费的微信小程序:皆我百晓生

    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来添加一个透明的覆盖视图,并将其设置在导航栏的位置上。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月12日
  • 修改了问题 12月4日
  • 赞助了问题酬金15元 12月4日
  • 创建了问题 12月4日