Android隐藏状态栏 全屏

Android隐藏状态栏 全屏

本教程讲述如何隐藏Android的不同版本的状态栏。隐藏状态栏(和任选的导航栏)可以有更多的显示空间,从而提供更真实的用户体验。
图1显示一个带有状态栏的应用:
Android隐藏状态栏 全屏_第1张图片
图1:显示了状态栏。

图二显示一个隐藏了状态栏的应用。注意操作栏也被隐藏了。你不应该在没有状态栏的情况下显示操作栏。
Android隐藏状态栏 全屏_第2张图片
图2.隐藏状态栏

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

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

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

使用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

你可能感兴趣的:(Android,android,全屏,隐藏状态栏)