您的位置:首页 > 移动开发 > Android开发

Android隐藏状态栏 全屏

2016-03-30 11:31 676 查看

Android隐藏状态栏 全屏

本教程讲述如何隐藏Android的不同版本的状态栏。隐藏状态栏(和任选的导航栏)可以有更多的显示空间,从而提供更真实的用户体验。

图1显示一个带有状态栏的应用:



图1:显示了状态栏。

图二显示一个隐藏了状态栏的应用。注意操作栏也被隐藏了。你不应该在没有状态栏的情况下显示操作栏。



图2.隐藏状态栏

在Android4.0和更低版本中隐藏状态栏

你可以在Android4.0和更低版本中,设置WindowManager标注来隐藏状态栏。隐藏工作可以通过编写代码或者在mainifest文件中设置activity的在主题得到实现。如果你的应用需要永久隐藏状态栏的话,在manifest文件中设置activity的主题是一个首先方法(严格的说,如果你需要你可以通过编写代码覆盖主题)。

例如:

<application
...
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
...
</application>


使用activity主题的优越性如下:

和编程对比起来,它更简单长久保持和更小的失误。

得到一个平滑的UI过渡,因为系统在实例化应用的主activity之前,就已获得了要渲染UI的信息了。或者你可以通过编程设置WindowManager标示。这个方法可以更容易的隐藏在和用户交互中的状态栏。

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// If the Android version is lower than Jellybean, use this call to hide
// the status bar.
if (Build.VERSION.SDK_INT < 16) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
setContentView(R.layout.activity_main);
}
...
}


当你设置了WindowManager标示(无论是通过activity主题还是通过编程),这些标示始终有效除非你的应用清除他们。

你可以使用FLAG_LAYOUT_IN_SCREEN来设置你的activity的布局,来使用相同的屏幕区域,这些都需要你打开FLAG_FULLSCREEN才有效。这些可以防止你的内容在状态栏隐藏或显示的时候内容重新调整。

在Android4.1或更高版本隐藏状态栏

你可以通过使用setSystemUiVisibility()来隐藏Android4.1(API level 16)或更高的版本的状态栏。setSystemUiVisibility()设置的UI标示在单独的视图层;这些设置都会被集合到窗口层。使用setSystemUiVisibility()去设置UI标示,比起使用WindowManager设置,可以设置到系统栏中更新小的颗粒。这段代码隐藏状态栏:

View decorView = getWindow().getDecorView();
//隐藏状态栏
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
//记住如果您隐藏状态栏绝不要显示活动栏,所以隐藏它也是必要的。
ActionBar actionBar = getActionBar();
if (actionBar != null)
actionBar.hide();


注意如下:

一旦UI标示被清除(例如,你永远通过activity导航),你的应用程序需要重新启动他们,如果你需要再次的隐藏这些栏儿。查看Responding to UI Visibility Changes 这里讨论了如何去监听UI的变化,从而使你的应用可以得到相应的反应。

当你去设置一个不同的UI标示,如果你在activity的 onCreate()方法中隐藏系统栏,当用户按Home的时候它又会重新出现。当用户重新打开activity的onCreate()不能被调用,所以系统栏保持可视,如果你想在activity的打开、关闭中对系统UI的变化来保持用户导航,需要在 onResume() 或者 onWindowFocusChanged()

方法setSystemUiVisibility()仅是一个效果,如果视图在可视状态调用它。

总是使用视图作为导航会引起setSystemUiVisibility()设置的标示被清除。

使内容出现在状态栏后面

在Android4.1或更高的版本中,你可以设置你的应用程序的内容显示在状态栏的后面,所以内容不能调整大小作为状态栏的隐藏和显示。要做到这一点需要使用SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN。您或许还需要使用SYSTEM_UI_FLAG_LAYOUT_STABLE来帮助你的布局文件保持稳定。

当你使用这个方式,它会让你确保应用程序UI的关键部件(例如:地图应用程序的内置控件),在没有结束前不会被系统栏覆盖。这样可能会使你的用于程序无法使用,在大多数情况下你可以添加
android:fitsSystemWindows
属性到你的XML布局文件中来处理这个问题。设置成成为
true
。这是调整父ViewGroup的padding来为你的系统窗口留出空间。这足以满足大多数的应用程序。

然而,在某些情况下你需要去修改默认的padding才能获得应用程序所希望的布局。去直接处理如何让你内容勾画出相对的系统栏(所占用一个空间被成为窗口的“插入内容”),覆盖fitSystemWindows(Rect insets)fitSystemWindows() 方法在视图层插入的窗口内容发生改变的时候被调用,允许窗口的内容进行调整。通过覆盖这个方法你可以处理你想要的插图。

出处:https://developer.android.com/training/system-ui/status.html#behind
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: