以某种方式应用" Navbar Apps"允许自定义导航栏的背景,即使它不在前景中,甚至不仅仅是简单的颜色。
我认为只有当应用程序位于前台时才能改变它的颜色...
我在一些自定义的roms上看过它,即使在播放音乐时也有特殊效果,但我不知道即使没有自定义ROM(或root)也可以自定义它。
这是黑客吗?它们如何改变,而不仅仅是导航栏的颜色,甚至为它设置背景图像(包括动态的电池状态)?
是否也可以更改其他系统栏,例如通知栏?
如何检查哪个应用程序位于前台(可能需要根据当前应用确定何时更改颜色)?它是一个新的API吗?我认为获取前台活动的API已被弃用,现在无论如何都没有帮助......
答案 0 :(得分:8)
基本设置非常简单。将它变成一个应用程序将需要一些工作。
您需要使用辅助功能 API以及WindowManager#addView(...)
。
是黑客吗?
我不能说我喜欢这个想法,但它并不是一个黑客。
他们如何改变,而不仅仅是导航的颜色 吧,但甚至为它设置了背景图像(包括动态图像, 电池状态)?
由于我们正在添加View
(或ViewGroup
),因此我们拥有更多控制权。
是否也可以更改其他系统栏,例如通知栏?
我会调查一下。
如何检查哪个应用程序位于前台(需要决定 何时根据当前的应用程序更改颜色,可能)?
您可以使用辅助功能API来监听Window
级别更改(AccessibilityEvent
) - 这将为您提供 packageName 。随意使用它。
我将为您提供一些指示:
<强>清单强>:
SYSTEM_ALERT_WINDOW
<service />
<强> Accessibilityservice 强>
onServiceConnected()
TYPE_SYSTEM_OVERLAY
用于WindowManager#addView(...)
onAccessibilityEvent(AccessibilityEvent)
; packageName 将在此处<强>结果强>
此处托管了一个示例项目:Link。