原文:https://developer.android.com/training/system-ui/index.html

管理系统UI

system bars 是专用于显示设备的提醒和消息的区域。通常情况下它会显示在屏幕上方,但是用户在使用视频,图片等沉浸式应用时,可以暂时暗淡系统栏使用户更专心,或者直接隐藏以达到完全的沉浸式体验。

如果你熟悉android的设计模式,你就知道符合标准设计规范的重要性。你需要根据用户体验对状态栏进行适当的修改。

这节课描述了在不同版本中如何暗淡和隐藏状态栏提供沉浸式的体验,又保持可以容易的调出状态栏。

课程

暗淡系统栏

学习怎样暗淡状态栏和导航栏。
支持android4.0以上。

暗淡状态栏和导航栏

使用 View.SYSTEM_UI_FLAG_LOW_PROFILE 标记。

// This example uses decor view, but you can use any visible view.
View decorView = getActivity().getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_LOW_PROFILE;
decorView.setSystemUiVisibility(uiOptions);
复制代码

当调出导航栏后状态栏就会完全显示,如果你想要重新暗淡,须要再设置一遍。

完全显示状态栏和导航栏

View decorView = getActivity().getWindow().getDecorView();
// Calling setSystemUiVisibility() with a value of 0 clears
// all flags.
decorView.setSystemUiVisibility(0);
复制代码

隐藏状态栏

4.0及4.0以下

方法一:修改manifest文件

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

The advantages of using an activity theme are as follows:

  • It's easier to maintain and less error-prone than setting a flag programmatically.
  • It results in smoother UI transitions, because the system has the information it needs to render your UI before instantiating your app's main activity.

方法二:修改WindowManager flags

public class MainActivity extends Activity {@Overrideprotected 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);}...
}
复制代码

When you set WindowManager flags (whether through an activity theme or programmatically), the flags remain in effect unless your app clears them.

You can use FLAG_LAYOUT_IN_SCREEN to set your activity layout to use the same screen area that's available when you've enabled FLAG_FULLSCREEN. This prevents your content from resizing when the status bar hides and shows.

4.1及以上

使用setSystemUiVisibility() 比修改WindowManager flags 更细化。

View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();
复制代码

隐藏导航栏

使用全屏沉浸式模式

使用沉浸式全屏模式 Android 4.4 (API Level 19) 加入了一种新的 UI 标记 SYSTEM_UI_FLAG_IMMERSIVE 用来使你的应用进入真正的全屏。当这个标记结合 SYSTEM_UI_FLAG_HIDE_NAVIGATION 和 SYSTEM_UI_FLAG_FULLSCREEN 时,就可以隐藏状态栏,并捕获所有的 touch 事件。

当沉浸式模式启动的时候,依然接收全部的 touch 事件。用户可以通过向内测的滑动来呼出状态栏和导航栏。这个操作会清除 SYSTEM_UI_FLAG_HIDE_NAVIGATION flag (和 SYSTEM_UI_FLAG_FULLSCREEN 如果设置了),所以系统栏可以显示。这个操作也会触发 View.OnSystemUiVisivilityChangeListener 。 但是如果你希望系统栏在一段时间后自动隐藏 ,可以使用 SYSTEM_UI_FLAG_IMMERSIVE_STICKY 。注意 “sticky” 不会触发任何监听。

响应UI视图可见化的改变

那么如何响应状态栏的改变呢?如果你想要其他视图也同步状态栏的隐藏和消失,可以使用 View.OnSystemUiVisibilityChangeListener 。

例子,你可以在oncreate中添加:

View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {@Overridepublic void onSystemUiVisibilityChange(int visibility) {// Note that system bars will only be "visible" if none of the// LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {// TODO: The system bars are visible. Make any desired// adjustments to your UI, such as showing the action bar or// other navigational controls.} else {// TODO: The system bars are NOT visible. Make any desired// adjustments to your UI, such as hiding the action bar or// other navigational controls.}}
});
复制代码

使用这个监听可以使整个界面同步对整个界面的一致性是很有好处的。

转载于:https://juejin.im/post/5a31d7cd6fb9a04500030fe1

管理系统状态栏和导航栏(翻译)相关推荐

  1. ios7 状态栏与导航栏布局与ScrollView的特性分析

    前言 iOS7是目前iOS史上最颠覆的一次改版. 它的出现令人兴奋,因为它将会带我们进入一个全新的时代: 它的到来也让我们忧心,因为它颠覆了一切,包括我们过去做过的很多努力. 但是,相信大家乐意为这个 ...

  2. android应用去掉状态栏_Android 显示、隐藏状态栏和导航栏

    Android 显示.隐藏状态栏和导航栏 控制状态栏显示,Activity的主题中配置全屏属性 true 控制状态栏显示,在setContentView之前设置全屏的flag getWindow(). ...

  3. Android 5.0状态栏和导航栏

    Material Design推出之后,app中也開始沿用这样的风格 今天来说一下状态栏颜色设置,在4.4的时候推出了透明状态栏和导航栏.在不使用第三方库的情况下,4.4还是没有全然解决存在actio ...

  4. Android 显示、隐藏状态栏和导航栏

    Android 显示.隐藏状态栏和导航栏 控制状态栏显示,Activity的主题中配置全屏属性 <item name="android:windowFullscreen"&g ...

  5. android 电话 状态栏,Android透明式状态栏、导航栏实现

    有很多应用有透明式状态栏.导航栏,表现形式是在不同页面里,状态栏可以与最上面的背景图片或者颜色保持一致.典型的案例就是手Q:(如图所示) 很明显,在手Q中主要的几个页面的标题栏(ActionBar位置 ...

  6. Android 7.0 SystemUI 之启动和状态栏和导航栏简介

    Android 7.0 SystemUI 之启动和状态栏和导航栏简介 一.SystemUI 是什么 首先SystemUI 是一个系统应用,apk路径位于/system/priv-app 源码路径位于: ...

  7. Android 沉浸式透明状态栏与导航栏

    Android 系统自4.2 开始 UI 上就没多大改变,4.4 也只是增加了透明状态栏与导航栏的功能 这个特性是andorid4.4支持的,最少要api19才可以使用.下面介绍一下使用的方法,非常得 ...

  8. 固定导航栏android,Android 状态栏和导航栏的真终极解决方案

    去年我写过一篇文章,透明状态栏和导航栏的终极解决方案,并在 Github 上开源了代码,https://github.com/Zackratos/UltimateBar,其实在那之后,我一直对这个项目 ...

  9. Android隐藏状态栏、导航栏

    Android隐藏状态栏.导航栏 [java] view plaincopy private void hideStatusNavigationBar(){ if(Build.VERSION.SDK_ ...

最新文章

  1. 中科院院士「修正」了麦克斯韦方程?研究发材料期刊,两度热搜,两极评价...
  2. python 私有和保护成员变量如何实现?—— 单下划线 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量; 双下划线 开始的是私有成员,意思是只有类对象自己能访问...
  3. windows-DLL注入
  4. 关于GCD多任务处理
  5. Ubuntu Linux配置Nginx+MySQL+PHP+phpMyAdmin详细步骤
  6. pygame中使用事件扫描实现对按键的检测以及小游戏的编写
  7. popwindow 焦点问题,物理返回键截获,软键盘监听问题
  8. IDEA 中tomcat上面有个x 而且找不到配置tomcat的选项
  9. Configuration Extensions - 简化配置,让你配置支持变量
  10. 问题 1045: [编程入门]自定义函数之整数处理
  11. elasticsearch初次查询超时_ElasticSearch的工作流程
  12. java 封装的概念_java封装的概念
  13. 开启服务器时启动线程
  14. Webpack学习手册
  15. PreScan传感器(二)——TIS传感器
  16. 移动端跨平台框架分析
  17. OLED 12864屏幕指南
  18. 笔记之STM32F072CBT6芯片的串口高级功能之反相配置问题(HAL库)
  19. CodeForces 1538G : Gift Set 思维 + 二分
  20. 2021安徽省安全员B证 多选题考试题库及答案

热门文章

  1. 特斯拉中国召回20万辆问题汽车:存在硬件风险,部分引擎盖可能意外打开
  2. 他89岁,拿下人生第3个博士学位,横跨医学物理学,只为“实现儿时梦想”
  3. 弹幕炸了!OpenAI直播大秀语音指挥AI自动编程,也就比老罗TNT强亿点点
  4. 不懂AI的我,是如何搞开发的?
  5. 威马新车型,率先放话搭载L4自动驾驶
  6. 何恺明团队最新力作RegNet:超越EfficientNet,GPU上提速5倍,这是网络设计新范式 | CVPR 2020...
  7. 超强NLP思维导图,知识点全面覆盖:从基础概念到最佳模型,萌新成长必备资源...
  8. BZOJ3632:外太空旅行(最大团,DFS)
  9. CODING 缺陷管理功能正式开始公测
  10. 64bit 简单汇编加法