在互联网上搜索了很多后,我终于找到了如何在4.2设备中隐藏和显示系统栏的方法:
隐藏:
Runtime.getRuntime().exec("service call activity 42 s16 com.android.systemui");
如果 API 小于 14,可以使用 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)
例如:
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)
Intent
来进行隐藏。View v = findViewById(R.id.view_id);
v.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
我希望能够为大家添加一些信息,希望对某些人有用。
要在我的低成本中国平板电脑上实现真正的全屏工作,我需要编辑一个位于文件中的文件。
system/build.prop
替换文本
ro.property.tabletUI=true
使用
#ro.property.tabletUI=true
我注释掉那一行代码后,就可以使用
全屏(full screen)
了。
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
对于manifest.xml中的每个活动
这个解决方案只适用于销售带有应用程序的平板电脑,并且需要root权限来编辑system/build.prop。因此,它并不适用于所有情况,请不要贬低这个小贡献。
编辑: 我注意到我的平板电脑在框架上有硬件按钮(主页、菜单和返回)。因此,Android允许我隐藏系统栏。我尝试了其他没有硬件按钮的平板电脑,但没有成功。
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方法中。
为了找到这个,我反向工程了一个非系统的Apk文件,发现它可以做到这一点。
根据官方文档:
“0x80000000”是FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,在Api级别21中引入的系统常量,它基本上表示“此窗口负责绘制系统栏的背景。”由于我没有手动绘制任何系统栏,所以没有显示菜单栏。
我只在一对运行Android ICS 4.0.3的Moverio BT-200上测试过,因为那是我目前正在使用的设备,而且现在我手头没有其他运行Api级别低于19的设备来测试。
有一种解决方法可以在几乎所有平板电脑上禁用菜单栏(而不是隐藏),而无需进行root。但这有点棘手,但它可以干净地工作。目前市场上的几个知名应用程序都使用此策略来实现其应用程序的禁用菜单栏功能。
https://developer.android.com/training/system-ui/navigation.html
我知道这不完全是你需要的,但对于其他人来说寻找解决此问题的方法可能很有用。