2011-12-12 114 views
28

只是想知道如何以编程方式隐藏ICS后退/ home/etc软件按钮。就像Youtube应用在播放视频时一样。我想在视频播放时将它们隐藏起来,但如果用户点击屏幕则会将其隐藏起来。隐藏ICS后退任务切换按钮

我似乎无法在网络上的任何地方或Google的文档中找到它。

回答

22

尝试设置全屏窗口标志SYSTEM_UI_FLAG_HIDE_NAVIGATION

+0

这是需要调用此根看法? – Talha

-1

这就是所谓的“熄灯模式”,当他们谈论它的应用程序。我找不到任何与ICS相关的东西,但是这里有一个关于Honeycomb讨论的链接。

where is api call to do lights out mode in honeycomb

+0

只是将它们变成了小点子,实际上并没有隐藏它们(就像前面提到的YouTube应用程序一样)。 –

29

pinxue通过点上...你想SYSTEM_UI_FLAG_HIDE_NAVIGATION。例如:

myView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

有一点要注意,虽然是在任何(我指的是任何)的用户交互的导航栏将被reshown。

与蜂窝最近,你可以进入“熄灯”模式(现在称为“低调”... SYSTEM_UI_FLAG_LOW_PROFILE)。这只会让导航栏上的项目看起来不那么明显(您可能已经看到了一点“小点”)。如果你想要做的最好的,你可以在保持向后兼容蜂窝的兼容性,可以使用反射来使用“最好”的方法:

// Ask the System Bar to hide 
int whichHiddenStatusToUse = android.view.View.STATUS_BAR_HIDDEN; 
try { 
    // if this next line doesn't thrown an exception then we are on ICS or 
    // above, so we can use the new field. 
    whichHiddenStatusToUse = View.class.getDeclaredField("SYSTEM_UI_FLAG_HIDE_NAVIGATION").getInt(mDrawingSurface); 
} catch (Exception ex) { 
} 
// now lets actually ask one of our views to request the decreased visibility 
myView.setSystemUiVisibility(whichHiddenStatusToUse); 
+7

答案很好。尽管如此,只要有可能,我会尽量避免反思。因为它很丑 - 像往常一样。我会简单地检查当前的平台版本并使用其中一个常量。例如。如果(Build.VERSION.SDK_INT> = Build.VERSION_CODES.ICE_CREAM_SANDWICH){...} –

+1

从哪里获得mDrawingSurface? – Nik

6

你想SYSTEM_UI_FLAG_HIDE_NAVIGATION

此标志自API 14冰淇淋三明治添加。在Honeycomb API 11中添加了标志STATUS_BAR_HIDDEN。在此之前,软导航按钮不存在,因此全屏模式完全由Themes(具体为Theme.NoTitleBar.Fullscreen)。

用途:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
    mBaseLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 
else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
    mBaseLayout.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); 
0

这个答案可能不是直接回答这个问题。但我张贴它可以帮助别人节省时间。

我需要完全隐藏导航栏。即使用户点击屏幕,也应该保持隐藏状态。

以上都不适合我。

很久以前我在Google上搜索这个主题几天后写了一堂课。我最终选择了这门课。

UtilsTaskBar.java

我不能到处测试,但它适用于4 **

注:我用这个类特殊用途的应用程序,这是不是典型用户。

如果您隐藏导航栏与这个类,它不会再显示,直到您重新启动设备或您再次显示它与同一类。

所以只有在你真的需要它时才使用它。

+0

没有在API 23 – yshahak

+0

中工作@yshahak它需要root权限才能运行这些功能,并且我没有在api23或更高版本上测试它,谢谢您通知。 – MBH

+0

那么,你没有提到一个关于生根的事情......那是一个不同的故事。 – yshahak

0

在AndroidManifest.xml中添加此:

<uses-permission android:name="android.permission.BROADCAST_STICKY"/> 

,那么你可以使用此功能来显示和隐藏家庭/回报导航栏

private void changeSystemBarVisibilty(boolean show) 
{ 
    Context context = getApplicationContext(); 
    final Intent intent = new Intent("android.intent.action.SYSTEM_BAR_VISIBILITY"); 
    intent.putExtra("show", show); 
    context.sendStickyBroadcast(intent); 
}