2012-03-29 63 views
20

我想扩展关于在Android冰淇淋三明治(4.0及更高版本)平板电脑屏幕底部隐藏系统/导航栏的讨论设备。有没有办法隐藏安卓系统中的系统/导航栏ICS

已经有一个线程(Is there a way to hide the system bar in Android 3.0? It's an internal device and I'm managing navigation)关于隐藏蜂巢设备上的酒吧。然而,我的客户将使用最新的冰淇淋三明治设备,并非常热衷于将屏幕隐藏在屏幕底部。他们的应用不适合一般消费者使用,他们接管整个屏幕以提供他们的体验非常重要。如何隐藏这个栏 - 或者至少覆盖所有按钮的行为 - 没有植入设备或重写它的固件?

+1

可能重复?这是一个内部设备,我正在管理导航](http://stackoverflow.com/questions/5109988/is-there-a-way-to-hide-the-system-bar-in-android-3-0-它的内部设备an) - Honeycomb的答案仍然适用于ICS – WarrenFaith 2012-03-29 13:54:31

+1

看起来Honeycomb和ICS WRT System Bar之间存在显着差异。请参阅http://android.serverbox.ch/?p=306,特别是2011年12月29日17:20 – user316117 2012-04-10 16:44:47

+0

的回复他指出4.0及以上。 Google的虚拟现实技术已经导致了一种新的模式,存在于4.4 请参阅下面关于沉浸模式的评论。 https://developer.android.com/training/system-ui/immersive.html – 2015-02-03 02:09:12

回答

24

检出SYSTEM_UI_FLAG_HIDE_NAVIGATION,该标志隐藏导航栏,直到用户与设备进行交互。它是在Android 4.0中引入的。您可以启用这个标志,例如像这样:

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

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

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

+1

我们试过这个。 ApiDemos冰淇淋三明治有一个屏幕,循环显示SystemUiVisibility的不同选项。当我们尝试SYSTEM_UI_FLAG_HIDE_NAVIGATION时没有任何反应。你认为这种行为可能取决于设备吗?我们在华硕Transformer Prime上试了一下。 – 2012-03-29 14:23:38

+0

我只是在模拟器中试过,它在那里工作,如上所述。我现在只拥有一个带有硬件键的旧HTC,因此我无法在真实的设备上测试它。可能是设备依赖,不能肯定地说。 – 2012-03-29 14:41:12

+0

作品,但从文档“有一个限制:因为导航控件是如此重要,最少的用户交互将导致他们立即重新出现。”即一旦用户触摸屏幕,他们就回弹。 – weston 2013-08-24 09:50:35

1

隐藏在android系统的IC状态栏和导航栏使用

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

尝试这个,但它仍然没有'不要为我隐藏导航栏 – 2012-11-17 13:01:55

3

更新 - 有围绕可用于这样的情况下(手动设置客户端的应用程序)工作。的确,导航栏不能在给定框架内移除。

但是,有一个解决方案来隐藏导航栏,如果生根器是一个选项为您。这里是如何:

Root device

Install and run Busybox

Install HideBar

在HideBar有在“亭”模式运行的选项,其中有没有办法重新显示导航栏。不用说,你真的需要小心这一点。

涉及的风险:

  • 砌体设备

  • 越来越安装BusyBox的错误,这可能让事情有点棘手,虽然是不太可能导致信息丢失。

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

这里有其他相同的问题:

+0

我想确认在非固定的ICS平板电脑上真的不可能。是否真的没有真正的全屏应用程序在市场上的非根植ICS平板电脑(不是默认的应用程序从分销商出货,他们可以使用自定义固件来达到目的,我想要一般的应用程序)?如果它确实存在,请告诉我。 – Yeung 2012-12-05 05:37:27

+0

@神猫我认为非rooter ICS平板电脑最着名的应用程序是“SureLock”:http://www.42gears.com/surelock/它有一个免费版本,但它有一些限制。如果您尝试 - 如果您可以成功使用它,请分享一下吗? – 2012-12-05 07:36:29

+2

“SureLock”有两个选项。 “禁用底部栏”和“隐藏按钮栏”。请参阅[链接](http://www.42gears.com/blog/wp-content/uploads/2012/02/disable-bottom-bar.jpg)。 “禁用”不需要root,但栏仍然存在。这只是让酒吧触摸不生效。而对于“隐藏”,它需要根。 – Yeung 2012-12-05 10:17:40

-2

如果你的设备是植根这个代码将会帮助你隐藏ICS系统吧(我测试了三星Galaxy Tab 2它工作出色):

ArrayList<String> list = new ArrayList<String>(); 
Map<String, String> 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")); 
0

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

<Application 
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" <!-- 
other parameters of application tag--> 
> 

和再做出线性或相对布局,并把它放在你的活动布局。

+1

这实际上不会删除导航栏,而只是标题栏。 – medonja 2013-04-05 16:10:40

0

除非将设备植入设备,否则无法将其隐藏。但是,当然有一种解决方法可能不符合您的要求,但目前市场上的一些众所周知的应用程序正在使用此策略为其应用程序实现此禁用菜单栏功能。

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

编辑:从4.4(19)开始,您可以使用以下命令启用所谓的“浸入式模式”。它是为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进行测试),但它会重新出现在触摸/点击事件中。 这也似乎捕捉焦点到酒吧,迫使你点击两次重新获得焦点视图。

我一直在试图找到一种方法来捕获实际上重新显示酒吧的事件。没有运气。

固执己见,我将下载android os代码,启动eclipse调试器并启动a-huntin。这不是一个错误 - 导航栏对应用程序生命周期至关重要。

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

+0

这是哪个游戏?它在Play商店中可用吗? – Yeung 2013-10-21 05:02:43

+0

ww.standard3d.com – 2015-02-03 01:59:17

2

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

+0

让我想起。我认为它不适用于所有平板电脑。我看到有自定义固件的平板电脑可以用这种silmiar方法隐藏栏,但它不是一般的。 – Yeung 2013-10-31 03:07:56

+1

这适用于我的平板电脑! – 2014-12-08 12:34:20

11

在已解锁装置,我使用下面的ADB命令

adb shell pm disable com.android.systemui 

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

adb shell pm enable com.android.systemui 

到目前为止,它的工作对我罚款

+0

当我运行这个禁用命令时,设备重新启动。这是否发生在你身上? – Dallas187 2014-04-03 10:24:55

+0

是的,它确实:)重新启动后,它工作正常,直到你再次启用systemUI(并且设备将再次重启以及) – 2014-04-07 01:54:41

+7

感谢您的反馈。重新启动真的困扰着我,所以我使用以下命令来隐藏'adb shell服务调用活动42 s16 com.android.systemui' ,然后再次显示这些条我执行这个命令: 'adb shell am startservice -n com.android.systemui/.SystemUIService'这种方法不需要重启,我想我会与你分享,以防你更喜欢它。 – Dallas187 2014-04-07 08:25:47

4

使用下面的代码是做隐藏导航

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

的一种方式,但上述问题只要用户触摸屏幕,它就会变得可见。

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

//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()。我知道这不是做这件事的最好方式。但我没有得到任何其他解决方案来做到这一点。

如果有人获得任何那么请让我知道如何永久隐藏导航和通知栏:)希望这个答案可以帮助一些一在未来:)

观看视频this更好地了解有关此功能。

0

可能是按钮behavor是足够多的,你可以看看我的回答here

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

0

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

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 

请参阅以下内容:Hiding the Navigation Bar

的[有没有办法隐藏在Android 3.0的系统栏