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
相关文章推荐
- ImageSwitcher 短暂白屏
- Android Fragment延迟加载数据
- Android属性动画完全解析(上),初识属性动画的基本用法
- Android中JNI编程详解
- Android中JNI编程详解
- Android Studio - Log神器
- Android开发错误Unable to execute dex: Multiple dex files define Lcom/baidu/android/b
- Android学习之RecyclerView
- Android Vitamio 播放器
- Android:Layout_weight的深刻理解
- android事件机制
- Android 应用(中英文)切换
- 查看APK签名
- Android获取视频文件某一帧并设置图片
- Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string 'android-23' 等错误
- Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string 'android-23' 等错误
- Android Studio中获取sha1证书指纹数据的方法
- android shape的使用
- Android内存泄露
- Android 数据库 短信 监听