Android隐藏状态栏 全屏
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
更多相关文章
- Android小项目之十二 设置中心的界面
- Android(安卓)启动分析 init进程 init.rc
- Android学习——TextView 设置中划线 下划线
- xml中设置圆角矩形框
- Android界面开发问题总结
- Android设置无标题窗口
- Android(安卓)中的设置关于手机中的型号的更改
- android 设置无标题
- android调节屏幕亮度