没有导航/状态栏触摸侦听器,为什么?

时间:2014-11-25 17:19:31

标签: android statusbar navigationbar

我的目标是:在用户触摸屏幕底部的导航栏(在某些平板电脑导航/状态栏上)后,我会抓住此事件并运行一个方法,几秒后使此栏变暗。

但是当我在进行互联网研究时,似乎这是不可能的。我试图解决它,但每个触摸事件只能在条形图上方的像素边界内工作。

所以我的问题是:是什么原因导致无法捕捉导航/状态栏触摸事件?

1 个答案:

答案 0 :(得分:1)

首先,导航栏和状态栏不是应用程序窗口的一部分......它们是操作系统拥有的系统窗口,由完全独立的进程运行。在没有来自操作系统的明确许可的情况下,无法将触摸侦听器附加到住在另一个窗口中的View,因为这样可以使第三方应用程序拦截分派给其他应用程序的触摸事件。如果可能的话,这显然是一个主要的安全漏洞。

效率是Android团队可能没有公开在导航/状态栏中监听触摸事件的能力的另一个原因。就像我之前说的那样,导航/状态栏是一个单独进程中的窗口,所以即使他们有充分的理由为应用程序创建某种触摸事件监听器,向应用程序调度触摸事件坐标也会涉及大量的进程间通讯。因此,实施这样的功能可能需要在谷歌的最终设计决策。

那就是说,当然有一些回调可以用来监听某些事件。例如,您可以覆盖onBackPressed()onKeyUp() / KEYCODE_HOME分别收听后退/主页按钮点击。除此之外,除非Android框架公开了允许您实现所需内容的API方法,否则您可能没有太多运气。