最近做个ANDROID项目,需要屏蔽平板底层的导航按钮,难点是APP里不仅有自己写的activity,还有调用别的APP(GSF)里的activity里,不是很好实现,先将已有的不完善的解决方法写出来。
所有的实现都在NEXSU 7上测试的,别的机子没测过,不保证有用。
下面介绍的第五种方法是现在最好的解决方法。通过反射机制获取隐藏服务StatusBarService,调用它的disable()方法来屏蔽导航按钮。
一. 自己写的activity屏蔽导航按钮
1. 获取到界面上的一个view
2. 调用API
java代码
3. 不过Google认为导航按钮太重要了,当你点击屏幕的时候,导航按钮会再次显示出来。
我尝试的监听导航按钮显示事件,当收到显示事件后,再次调用上面的API来隐藏,不过这样显示有问题,屏幕有抖动。
java代码
4. 由于目前还没有好的解决上面的问题,我就不去掉导航按钮整个一栏,而是仅仅去掉导航按钮
java代码
运行效果图如下,最下面的导航栏已经没有导航按钮了,只有一个圈圈,无法触控。
二. 调用第三方APK里的activity
由于需要GOOGLE的登录界面,我就调用了GSF提供的登录activity,方法如下:
java代码
但是当登录界面弹出对话框时,导航按钮都显示出来了,这个是客户接受不了的,要我必须改掉,目前还没有解决掉(已经解决)。问题界面如下
目前想出来的方法是将下面导航栏都去掉,有三种方法,当必须都已经ROOT了。
两种方法屏蔽掉导航按钮,不需要ROOT。
第一种:
修改system/build.prop 添加系统属性 qemu.hw.mainkeys=1,重启。
缺点: 需要重启,所以就没有采用。
第二种:
删除system/app/SystemUI.apk ,这个就是用来显示系统导航栏的APK,但在需要的时候,将APK在放到app目录下,启动服务就行了。
在APK开始运行的时候,将SystemUI.apk移动另一个地方,当APK运行结束的时候,在将SystemUI.apk移回原位,启动SystemUIService服务。
所有的实现都在NEXSU 7上测试的,别的机子没测过,不保证有用。
下面介绍的第五种方法是现在最好的解决方法。通过反射机制获取隐藏服务StatusBarService,调用它的disable()方法来屏蔽导航按钮。
一. 自己写的activity屏蔽导航按钮
1. 获取到界面上的一个view
2. 调用API
java代码
3. 不过Google认为导航按钮太重要了,当你点击屏幕的时候,导航按钮会再次显示出来。
我尝试的监听导航按钮显示事件,当收到显示事件后,再次调用上面的API来隐藏,不过这样显示有问题,屏幕有抖动。
java代码
4. 由于目前还没有好的解决上面的问题,我就不去掉导航按钮整个一栏,而是仅仅去掉导航按钮
java代码
运行效果图如下,最下面的导航栏已经没有导航按钮了,只有一个圈圈,无法触控。
二. 调用第三方APK里的activity
由于需要GOOGLE的登录界面,我就调用了GSF提供的登录activity,方法如下:
java代码
但是当登录界面弹出对话框时,导航按钮都显示出来了,这个是客户接受不了的,要我必须改掉,目前还没有解决掉(已经解决)。问题界面如下
目前想出来的方法是将下面导航栏都去掉,有三种方法,当必须都已经ROOT了。
两种方法屏蔽掉导航按钮,不需要ROOT。
第一种:
修改system/build.prop 添加系统属性 qemu.hw.mainkeys=1,重启。
缺点: 需要重启,所以就没有采用。
第二种:
删除system/app/SystemUI.apk ,这个就是用来显示系统导航栏的APK,但在需要的时候,将APK在放到app目录下,启动服务就行了。
在APK开始运行的时候,将SystemUI.apk移动另一个地方,当APK运行结束的时候,在将SystemUI.apk移回原位,启动SystemUIService服务。
原文链接:http://www.eyeandroid.com/thread-16939-1-1.html