gpt4 book ai didi

android - 即使不在前景中,您如何更改导航栏背景(不仅仅是颜色)?

转载 作者:IT老高 更新时间:2023-10-28 23:35:10 26 4
gpt4 key购买 nike

背景

不知何故,应用程序“Navbar Apps”允许自定义导航栏的背景,即使它不在前景中,甚至不仅仅是简单的颜色。

enter image description here

问题

我认为只能更改它的颜色,并且只有当应用程序处于前台时...

我在一些自定义 rom 上见过它,甚至在播放音乐时有特殊效果,但我不知道即使没有自定义 rom(或 root)也可以自定义它。

问题

  1. 这是黑客行为吗?它们是如何变化的,不仅仅是导航栏的颜色,甚至还为其设置了背景图片(包括动态图片,用于电池状态)?

  2. 是否也可以更改其他系统栏,比如通知栏?

  3. 它如何检查前景中的应用程序(可能需要根据当前应用程序决定何时更改颜色)?它是一个新的 API 吗?我认为用于获取前台 Activity 的 API 已被弃用,现在没有任何帮助......

最佳答案

基本设置非常简单。把它变成一个应用程序需要一些工作。

您需要使用 Accessibility API 以及 WindowManager#addView(...) .

Is it a hack?

我不能说我喜欢这个想法,但它并不完全是一个 hack。

How do they change, not just the color of the navigation bar, but even set a background image for it (including dynamic one, for battery status) ?

由于我们要添加 View (或 ViewGroup ),我们有更多的控制权。

Is it also possible to change other system bars, like the notification bar?

我会调查的。

How does it check which app is in the foreground (needed for deciding when to change the color, based on current app, probably)?

您可以使用辅助功能 API 来监听 Window级别更改 (AccessibilityEvent) - 这将为您提供 packageName。随心所欲地使用它。

我会给你一些指点:

list :

  • 权限:SYSTEM_ALERT_WINDOW
  • 无障碍服务声明:<service />

无障碍服务

  • 膨胀、初始化和添加您的布局:onServiceConnected()
  • 我使用了 TYPE_SYSTEM_OVERLAYWindowManager#addView(...)
  • 监听 AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED
  • 覆盖 onAccessibilityEvent(AccessibilityEvent) ; packageName 将在此处提供

结果

enter image description here

这里托管了一个示例项目:Link .

关于android - 即使不在前景中,您如何更改导航栏背景(不仅仅是颜色)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39383183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com