【问题标题】:How do you change the nav-bar background (not just color), even when not in foreground?即使不在前景中,您如何更改导航栏背景(不仅仅是颜色)?
【发布时间】:2016-09-08 05:28:49
【问题描述】:

背景

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

问题

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

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

问题

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

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

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

【问题讨论】:

  • 分析权限,应用程序请求覆盖其他应用程序并访问可访问性(导航栏应用程序)。你研究过吗?
  • 我使用SystemBarTint 来更改导航栏的颜色和资源。
  • @BurakCakir 对于前台应用程序是可能的,但无论其状态如何,这个都可以......

标签: android android-navigation-bar


【解决方案1】:

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

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

这是一个黑客吗?

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

它们如何变化,而不仅仅是导航的颜色 栏,但甚至为其设置背景图像(包括动态图像, 电池状态)?

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

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

我会调查的。

它如何检查哪个应用程序在前台(需要决定 何时更改颜色,可能基于当前应用程序)?

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

我会给你一些指点:

清单

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

无障碍服务

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

结果

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

【讨论】:

  • 您在哪里添加了视图?是否像使用 SYSTEM_ALERT_WINDOW 的顶级示例?喜欢聊天头教程(例如:piwai.info/chatheads-basics)。我记得,视图不能进入导航栏。你是怎么把它放在那里的?另外,保持服务处于活动状态(使其成为前台)是否重要,这样视图就不会消失(因为服务可能会被杀死)?
  • @androiddeveloper 是的,解决方案使用SYSTEM_ALERT_WINDOW。使用FLAG_LAYOUT_NO_LIMITSGravity.BOTTOM,您可以将视图定位在屏幕上的任何位置。 AccessibilityService 由系统管理,并由用户启用/禁用。换句话说,您(作为开发人员)不会启动/停止服务。
  • @androiddeveloper 这只是一个概念证明。有一些不稳定的 API 可以告诉您导航栏是否存在于设备上 - 参见 this。导航栏的方向 - 请参阅 this。这只是我的观点——但是对于这些类型的应用程序,您可以针对常见情况进行设计,并在报告错误时改进您的代码。从NavBar Apps' 评论和 Google+ 页面可以看出这一点。
  • 我明白了。所以你说它可能有很多变通方法,以便它可以知道何时放置特殊的顶部视图以及如何放置。您能否显示代码以将新标志放在顶部视图?
  • 您可以在这里查看项目:Link.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多