Android隐藏状态栏 全屏

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

图1:显示了状态栏。

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

图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

更多相关文章

  1. Android小项目之十二 设置中心的界面
  2. Android(安卓)启动分析 init进程 init.rc
  3. Android学习——TextView 设置中划线 下划线
  4. xml中设置圆角矩形框
  5. Android界面开发问题总结
  6. Android设置无标题窗口
  7. Android(安卓)中的设置关于手机中的型号的更改
  8. android 设置无标题
  9. android调节屏幕亮度

随机推荐

  1. Android透明式状态栏、导航栏实现
  2. Android学习笔记(4)---模拟手机拨号器
  3. 关于Android的组件名
  4. Android使用 LruCache 缓存图片
  5. 避免内存泄漏
  6. Android中@+id和@id的区别
  7. 使用Android模拟器测试Linux驱动(1)
  8. android的开发耗电量需要注意哪些
  9. Android(安卓)性能优化之内存泄漏检测以
  10. Android应用资源的使用方法(数组、颜色、