简单的方法来隐藏Android ICS上的系统栏
我会给我的ICS平板电脑用户完成调查,所以我希望用户只能使用我的应用程序。 他们不应该能够切换到主屏幕,按下button等,所以我想完全隐藏系统栏。
我的平板电脑是根植的,我知道这样的应用程序可以帮助我,但我不需要这个应用程序的所有额外的function。
我发现这个教程可以帮助我,但如果我可以添加代码来做我自己的,那将是很棒的。
HideBar有一个特别针对这种用例的信息亭模式。
免费下载请参见http://ppareit.github.com/HideBar/ 。 您也可以通过https://play.google.com/store/apps/details?id=be.ppareit.hidebar在市场上find它。;
如果您想将其纳入您自己的testing/调查应用程序,您可以随时联系开发人员(请参阅电子邮件的链接)。 代码可以被解释,或者可以提供隐藏的Intent
。
在互联网上search了很多东西之后,我设法让系统栏隐藏起来,出现在4.2设备上,使用:
隐藏:
Runtime.getRuntime().exec("service call activity 42 s16 com.android.systemui");
或者对于小于14的API使用79而不是42。您可能还需要包含SET_DEBUG_APP权限,在这种情况下,您需要使用系统密钥对应用程序进行签名或将其安装在/ system / app /目录中。
以显示:
Runtime.getRuntime().exec("am startservice --user 0 -n com.android.systemui/.SystemUIService");
另外一些人使用-a(而不是-n)选项,虽然这是在我的设备上导致错误:
错误:未find; 没有服务开始。
对于Android 4.4,有一个名为沉浸模式的新function,它隐藏了系统和状态栏。 系统UI由用户通过使用从屏幕的顶部或底部的边缘滑动来切换。 欲了解更多详情,请看:
http://developer.android.com/reference/android/view/View.html#setSystemUiVisibility(int);
在android kitkat中使用新的IMMERSIVE模式
例如:
getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE)
检查这个链接:(需要root) http://android.serverbox.ch/?p=306
类似的问题也发布在这里也有: 有没有办法隐藏在Android 3.0系统栏? 这是一个内部设备,我正在pipe理导航
或者试试HideBar http://ppareit.github.com/HideBar/
其实你可以简单地把系统栏放在“熄灯”模式,系统栏button和通知变暗。
View v = findViewById(R.id.view_id); v.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
我想添加一些信息到现有的答复,希望对某人有用。
要获得一个真正的全屏工作在我的低成本中国片我需要编辑一个文件位于
system/build.prop
replace文字
ro.property.tabletUI=true
同
#ro.property.tabletUI=true
(我评论线)。 之后,我可以使用全屏
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
对于minfest.xml中的每个活动
此解决scheme只有在您的应用程序中销售平板电脑并且需要root权限才能编辑system/build.prop
。 所以这不是所有的解决scheme ,所以请不要低估这个小小的贡献。
编辑:我注意到我的平板电脑上有硬件button(家庭,menù和背部)。 所以Android让我隐藏系统栏。 我尝试了与没有硬件button没有成功的其他平板电脑。
Google打算将Android仅用于消费者。 他们将系统UI栏更加紧密地集成到了Android ICS(4.0)中,以防止人们通过这种方式对设备进行root化和杀死。 试图删除系统栏进程将阻止操作系统完全启动。
如果你想限制用户访问主屏幕,那么你是Android的ICS运气不好。 我会build议find一个平板电脑制造商谁预装Android 2.3的设备。 要么,要么使用根植的Android 3.x设备。
如果您打算使用Android自助服务terminal或locking设备,那么您最好定位一个更开放的操作系统。
我发现了一个解决scheme,在我的使用情况下,即使在一个NOT ROOTED设备上隐藏菜单栏,它的作用就像一个魅力:
设置这个标志
layoutparams.flags = 0x80000000 | layoutparams.flags;
到我的窗口的布局参数只是做的伎俩!
以下是我使用的完整代码片段:
Window window = getWindow(); android.view.WindowManager.LayoutParams layoutparams = window.getAttributes(); layoutparams.flags = 0x80000000 | layoutparams.flags; window.setAttributes(layoutparams);
在我的Activity onCreate。
为了find这个我扭转engeneered一个非系统的Apk我发现,以某种方式能够做到这一点。
根据官方文件:
即“0x80000000”是在Api级别21中作为系统常量引入的FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,它基本上表示“此窗口负责绘制系统栏的背景”。 因为我没有手动绘制任何系统栏,没有菜单栏显示。
我只在运行Android ICS 4.0.3的一双Moverio BT-200上testing过,因为那是我目前正在使用的设备,也是因为现在我没有其他设备在19之前运行Api级别testing它。
有一个解决方法,禁用菜单栏(不隐藏)在所有大多数所有平板电脑没有生根。 但是这有点棘手,但它工作干净。 目前市场上有几个众所周知的应用程序使用这种策略来实现这种禁用菜单栏function为他们的应用程序。
- 授予pipe理员权限(需要一次用户参与才能激活)。
- 以编程方式设置密码并使用设备pipe理员configuration文件apilocking设备。
- 然后加载原始locking屏幕上的UI。 (当然,只要在活动之间发生转换,就会显示背景locking屏幕,但是如果逻辑组织的很好,那么用户就会很stream畅,不那么注意)
- 当需要启用时,使用设备策略pipe理器对象的resetPassword(“”,0)将密码重置为“”。
为了补充已经给出的答案,并在情况下需要类似行为的人有用,这个教程是Android设备4.0及更高版本,它告诉你如何隐藏导航栏和状态栏(他们将重新出现屏幕再次被触摸):
https://developer.android.com/training/system-ui/navigation.html
我意识到这不是你需要的东西,但可能对别人看这个问题有用。