我会给我的 ICS 平板电脑供用户完成调查,所以我希望用户只使用我的应用程序。他们应该无法切换到主屏幕,按后退按钮等,所以我想完全隐藏系统栏。
我的平板电脑已植根,我知道这样的一些应用程序 可以帮助我,但我不需要这个应用程序的所有额外功能。
我发现这个教程可以帮助我,但如果我可以添加代码来做我自己的,那就太好了。
在互联网上进行了大量搜索后,我设法让系统栏隐藏并出现在 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)选项,尽管这导致我的设备出现错误:
错误:未找到;没有服务启动。
对于 Android 4.4,有一个名为沉浸式模式的新功能,它隐藏了系统栏和状态栏。系统 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)
HideBar 具有专门针对此用例的信息亭模式。
可从http://ppareit.github.com/HideBar/免费下载。您也可以在https://play.google.com/store/apps/details?id=be.ppareit.hidebar在市场上找到它。
如果您想将其合并到您自己的测试/调查应用程序中,您可以随时联系开发人员(请参阅电子邮件链接)。可以解释代码或Intent
提供隐藏操作。
检查这个链接:(需要root) http://android.serverbox.ch/?p=306
这里也发布了类似的问题: 有没有办法在 Android 3.0 中隐藏系统栏?这是一个内部设备,我正在管理导航
或尝试 HideBar http://ppareit.github.com/HideBar/
实际上,您可以简单地将系统栏置于“熄灯”模式,系统栏按钮和通知会变暗。
View v = findViewById(R.id.view_id);
v.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
我想在现有回复中添加一些信息,希望它对某人有用。
要在我的低成本中国平板电脑上实现真正的全屏显示,我需要编辑位于
system/build.prop
替换文本
ro.property.tabletUI=true
和
#ro.property.tabletUI=true
(我评论这条线)。之后,我可以使用全屏
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
对于 minfest.xml 中的每个活动
此解决方案仅在您使用应用程序销售平板电脑并且需要 root 权限来编辑system/build.prop
. 所以这不是一个适合所有人的解决方案,所以请不要对这个小小的贡献投反对票。
编辑: 我注意到我的平板电脑的框架上有硬件按钮(主页、菜单和返回)。所以Android让我隐藏系统栏。我尝试了其他没有硬件按钮的平板电脑,但没有成功。
Google 打算将 Android 仅用于消费者。他们将系统 UI 栏更紧密地集成到 Android ICS (4.0) 中,以防止人们以这种方式生根设备并杀死栏。尝试删除系统栏进程将阻止操作系统完全启动。
如果您想限制用户访问主屏幕,那么您对 Android ICS 不走运。我建议找一家平板电脑制造商来为设备预装 Android 2.3。要么,要么使用有根的 Android 3.x 设备。
如果您打算将 Android 用于信息亭或锁定设备,那么您最好选择更开放的操作系统。
我找到了一个解决方案,在我的用例中,即使在未根目录的设备上也隐藏菜单栏,它就像一个魅力:
设置这个标志
layoutparams.flags = 0x80000000 | layoutparams.flags;
到我的窗口的布局参数就可以了!
这是我使用的完整片段:
Window window = getWindow();
android.view.WindowManager.LayoutParams layoutparams = window.getAttributes();
layoutparams.flags = 0x80000000 | layoutparams.flags;
window.setAttributes(layoutparams);
在我的活动 onCreate。
为了找出这一点,我反向设计了一个非系统 Apk,我发现它能够以某种方式做到这一点。
根据官方文档:
that "0x80000000" is the FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS introduced as a system constant in Api level 21, and it basically indicates that "this Window is responsible for drawing the background for the system bars." and since i'm not manually drawing any system bar, no menu bar is shown.
I only tested this on a pair of Moverio BT-200 running Android ICS 4.0.3 because that is the device i'm currently working on and also because right now i don't have other device running Api levels prior to 19 under my hands to test it.
有一种解决方法可以在所有大多数平板电脑中禁用菜单栏(而不是隐藏)而无需生根。但这有点棘手,但它很干净。目前市场上的几个知名应用程序使用此策略为其应用程序实现此禁用菜单栏功能。
为了补充已经给出的答案,如果它对需要类似行为的人有用,有这个针对 android 设备 4.0 及更高版本的教程,它告诉你如何隐藏导航栏和状态栏(它们会在再次触摸屏幕):
https://developer.android.com/training/system-ui/navigation.html
我意识到这不是您所需要的,但可能对其他查看此问题的人有用。