有没有办法隐藏Android ICS中的系统/导航栏

我想扩展关于在Android Ice Cream Sandwich(4.0及更高版本)平板电脑设备上隐藏屏幕底部的系统/导航栏的讨论。

已经有一个线程( 有没有办法隐藏Android 3.0中的系统栏?这是一个内部设备,我正在管理导航 )关于隐藏Honeycomb设备上的栏。 然而,我的客户将使用最新的冰淇淋三明治设备,并且非常热衷于隐藏屏幕底部的条形图。 他们的应用程序不适合普通消费者使用,他们接管整个屏幕以提供他们的体验非常重要。 如何在没有设备生根或重写固件的情况下隐藏此栏 – 或者至少覆盖所有按钮的行为?

Solutions Collecting From Web of "有没有办法隐藏Android ICS中的系统/导航栏"

检查SYSTEM_UI_FLAG_HIDE_NAVIGATION ,此标志隐藏导航栏,直到用户与设备交互。 它是在Android 4.0中引入的。 您可以启用此标志,例如:

 getWindow().getDecorView() .setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

请注意,导航不会自动再次消失,您必须在用户与设备交互后每次设置。

或者,您可以通过使用SYSTEM_UI_FLAG_LOW_PROFILE使导航不那么突兀,这会将按钮更改为小点(例如,像相机应用程序)

在root设备上,我使用以下adb命令

 adb shell pm disable com.android.systemui 

永久隐藏导航栏。 要再次显示,请运行

 adb shell pm enable com.android.systemui 

到目前为止,它对我来说很好

使用以下代码是隐藏导航的一种方法

 getWindow().getDecorView() .setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

但是上面的问题是,一旦用户触摸屏幕就会变得可见。

在Android Kitkat中有一个名为IMMERSIVE的function,它隐藏了通知栏和导航。 即使用户与屏幕交互,也不会显示。 但是,用户可以通过从屏幕顶部向底部滑动来使其可见。 下面是实现它的代码

 //Initializew this in onCreate() View mDecorView = getWindow().getDecorView(); //Then call this function private void hideSystemUI() { mDecorView.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_LOW_PROFILE | View.SYSTEM_UI_FLAG_IMMERSIVE); } 

但是在我的情况下,即使用户从屏幕顶部向底部滑动,我也不希望导航和通知栏可见。 我尝试了一下,我能够部分实现它。 我做的是我实现了一个CountDownTimer ,它会每隔一秒左右调用hideSystemUI() 。 我知道这不是最好的方式。 但我没有得到任何其他解决方案。

如果有人得到任何,请告诉我如何永久隐藏导航和通知栏:)希望这个答案有助于将来:)

观看此video以更好地了解此function。

更新 – 有一个工作可用于此类情况(手动为客户端设置应用程序)。 实际上,导航栏无法在给定框架内删除。

但是, 如果生根设备是的选项则可以使用隐藏导航栏的解决方案 。 方法如下:

根设备

安装并运行Busybox

安装HideBar

在HideBar中,有一个选项可以在“Kiosk”模式下运行,在该模式下无法重新显示导航栏。 不用说,你真的需要小心这一点。

涉及的风险:

  • 砖砌设备

  • 让BusyBox的安装错误,这可能会让事情变得有点棘手,尽管不太可能导致信息丢失。

  • 陷入僵局,你无法退出你的应用程序。 例如,如果1你的GUI没有提供关闭选项,2你的应用程序在启动时自动启动,3 HideBar不允许任何方式重新显示导航栏,4 HideBar在启动时隐藏导航栏。只需从adb停止/卸载您的应用即可克服这个问题。

以下是其他相同的问题:

  • Android平板电脑导航栏不会隐藏

  • 如何在Android上删除系统栏,我的意思是,所有

  • Android平板电脑导航栏不会隐藏

  • 有没有办法隐藏Android ICS中的系统/导航栏

  • 隐藏平板电脑系统栏

  • Android 4平板电脑的真正全屏

  • 在Android ICS上隐藏系统栏的简便方法

虽然这是一个hacky解决方案,但我认为它值得关注,因为不需要生根设备: getWindow().getDecorView().setSystemUiVisibility(8);

要在android ics中隐藏状态栏和导航栏使用

 LinearLayout layout = (LinearLayout)findViewById(R.id.layout); layout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

编辑:从4.4(19)开始,您可以使用以下内容启用所谓的“IMMERSIVE MODE”。 它是为Google的Cardboard vrtoolkit引入的,但可以普遍使用。

setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE)

https://developer.android.com/training/system-ui/immersive.html

从我的努力来看,似乎:setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)在平板电脑上不起作用。

它适用于智能手机(使用Nexus 4 Mako测试),但它会在触摸/点击事件中重新出现。 这也似乎将焦点捕捉到栏上,迫使您单击两次以重新获得焦点到视图。

我一直试图find一种方法来捕获实际上重新显示条形的事件。 没有运气。

顽固,我打算下载android os代码,启动eclipse调试器并进入a-huntin。 这不是错误 – 导航栏对应用程序生命周期至关重要。

我见过应用程序(游戏等),所以有一种方法没有生根。

将此代码放在清单文件的应用程序标记中以隐藏默认标签栏

  > 

然后制作线性或相对布局并将其放置在您的活动布局中。

除非您已将设备植根,否则无法隐藏它。 但当然有一种解决方法可能不符合您的要求,但目前市场上的几个知名应用程序使用此策略来实现其应用程序的禁用菜单栏function。

  • 授予管理员权限。
  • 设置密码并使用设备管理员配置文件api锁定设备
  • 然后加载原生锁定屏幕顶部的UI。 (当然,每当活动之间发生转换时,这将显示背景锁定屏幕。但是如果逻辑组织良好,那么它将是平滑的并且不会被用户注意到)
  • 当需要启用时,使用设备策略管理器对象的resetPassword(“”,0)将密码重置为“”。

可能是按钮行为是你应该看看我的答案在这里

你仍然有酒吧,但没有重启平板电脑你不能退出应用程序

您可以使用SYSTEM_UI_FLAG_HIDE_NAVIGATION标志隐藏Android 4.0及更高版本上的导航栏。 此代码段隐藏了导航栏和状态栏:

 View decorView = getWindow().getDecorView(); // Hide both the navigation bar and the status bar. // SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as // a general rule, you should design your app to hide the status bar whenever you // hide the navigation bar. int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions 

请参阅以下内容: 隐藏导航栏

如果您的设备已植根,此代码将帮助您隐藏ICS上的系统栏(我在三星Galaxy Tab 2上测试它并且它非常好用):

 ArrayList list = new ArrayList(); Map env = System.getenv(); for (String envName : env.keySet()) { list.add(envName + "=" + env.get(envName)); } // Array containing the environment to start the new process in String[] envp = (String[]) list.toArray(new String[0]); String hidingCommand = "while [ true ]\n" + "do\n" + "killall com.android.systemui\n" + "done\n"; Runtime.getRuntime().exec(new String[] { "su", "-c", command }, envp); myContext.sendBroadcast(new Intent("com.mycompany.myapp.ACTION_BARHIDDEN"));