android界面UI美化:沉浸模式、全透明或半透明状态栏及导航栏的实现
android api19开始我们就能对顶部状态栏和底部导航栏进行半透明处理了,而api21开始则可以实现全透明状态栏与导航栏以及开启沉浸模式,至于什么是沉浸模式,大家百度一下应该就都知道了,有一点需要强调的是全透明不是沉浸模式,前者只是将状态栏、导航栏的背景设置为完全透明,而后者则是完全将状态栏与导航栏隐藏并且只要在屏幕顶部下滑或在底部上滑就能短暂呼出状态栏与导航栏当然几秒钟之后还是会隐藏的;
下面三张图的效果分别是:普通状态栏,半透明状态栏,全透明状态栏
下面看方法:
/*** 设置透明状态栏与导航栏* @param navi true不设置导航栏|false设置导航栏*/
public void setStatusBar(boolean navi) {//api>21,全透明状态栏和导航栏;api>19,半透明状态栏和导航栏if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {Window window = getWindow();window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(Color.TRANSPARENT);if (navi) {window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN//状态栏不会被隐藏但activity布局会扩展到状态栏所在位置| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION//导航栏不会被隐藏但activity布局会扩展到导航栏所在位置| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);window.setNavigationBarColor(Color.TRANSPARENT);} else {window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);}} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {if (navi) {//半透明导航栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}//半透明状态栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);}
}
/*** 进入沉浸模式* @param view view*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public static void hideSystemUI(View view) {view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_FULLSCREEN| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY//会自动隐藏);
}/*** 退出沉浸模式* @param view view*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public static void showSystemUI(View view) {view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
注意:状态栏或导航栏进行透明处理之后,咱们的布局内容是会扩展到原来状态栏与导航栏的位置,但是这样就会造成状态栏显示的内容与我们的布局内容重叠,所以接下来还需要进行一步处理,本人偷懒所以只在代码中获取页面最上面的控件进行paddingTop出状态栏的高度(国内大多数品牌手机都是没有底部导航栏的,所以不做处理)
/*** 获取状态栏高度*/ public static int getStatusBarHeight(Context context) {int result = 0;try {int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");if (resourceId > 0) {result = context.getResources().getDimensionPixelSize(resourceId);}} catch (Resources.NotFoundException e) {e.printStackTrace();}return result; }
主要的几个flag:public static final int SYSTEM_UI_FLAG_HIDE_NAVIGATION = 0x00000002; 隐藏导航栏public static final int SYSTEM_UI_FLAG_FULLSCREEN = 0x00000004; 字面意思是全屏显示,实际是状态栏会被隐藏而导航栏未作处理public static final int SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 0x00000200; 导航栏不会被隐藏但布局会扩展到导航栏所在位置public static final int SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN = 0x00000400; 状态栏不会被隐藏但布局会扩展到状态栏所在位置public static final int SYSTEM_UI_FLAG_IMMERSIVE = 0x00000800; 配合SYSTEM_UI_FLAG_HIDE_NAVIGATION使用,如果只有SYSTEM_UI_FLAG_HIDE_NAVIGATION而不设置SYSTEM_UI_FLAG_IMMERSIVE,那么用户交互后会自动清除SYSTEM_UI_FLAG_HIDE_NAVIGATION这个flag;public static final int SYSTEM_UI_FLAG_IMMERSIVE_STICKY = 0x00001000; 配合SYSTEM_UI_FLAG_HIDE_NAVIGATION和(或)SYSTEM_UI_FLAG_FULLSCREEN使用,设置这个flag之后,用户在屏幕顶部下滑或者在底部上滑调出状态栏、导航栏之后它们仍会自动隐藏;
add on 2017.09.19:
Android 4.4 以下进入全屏
直接给Window添加全屏标记位
activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
同时,为了不让布局因SystemUI的可见或隐藏而重新layout,可以给Window添加FLAG_LAYOUT_IN_SCREEN和FLAG_LAYOUT_NO_LIMITS,这样SystemUI出现时候是overlay在布局内容的上面。
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
android界面UI美化:沉浸模式、全透明或半透明状态栏及导航栏的实现相关推荐
- android界面美化教程,android界面UI美化:沉浸模式、全透明或半透明状态栏及导航栏的实现...
android api19开始我们就能对顶部状态栏和底部导航栏进行半透明处理了,而api21开始则可以实现全透明状态栏与导航栏以及开启沉浸模式,至于什么是沉浸模式,大家百度一下应该就都知道了,有一点需 ...
- Android 12系统源码_SystemUI(五)自定义状态栏和导航栏视图
前言 前面几篇文章我们具体分析了Android12系统原生的StatusBar和CarStatusBar的启动流程以及视图构建流程,本篇文章我们来自定义实现状态栏和导航栏视图. 一.为系统添加自定义状 ...
- Android状态栏和导航栏透明和沉浸式模式
最近在App上需要对状态栏进行相关的设置,在网上看了些文章,像郭神的沉浸式那篇博客对我启发蛮大,但是对状态栏的设置,包括隐藏,透明,颜色设置等,并没有比较系统的概念,实现方式不止一种,有操作Windo ...
- 固定导航栏android,Android 状态栏和导航栏的真终极解决方案
去年我写过一篇文章,透明状态栏和导航栏的终极解决方案,并在 Github 上开源了代码,https://github.com/Zackratos/UltimateBar,其实在那之后,我一直对这个项目 ...
- (AS笔记)Android全透明沉浸式主题样式——顶部状态栏+底部导航栏
目录 1.前言 2.自定义主题theme 3.全透明沉浸式主题theme 4.设置状态栏颜色(Android 5.0+) 5.设置状态栏半透明 6.设置状态栏全透明 7.设置底部导航栏半透明 8.全透 ...
- Android布局延伸状态栏,Android沉浸式全屏讲解(状态栏、导航栏处理)
Android应用中经常会有一些要求全屏显隐状态栏导航栏的需求.通过全屏沉浸式的处理可以让应用达到更好的显示效果.下面系统的讲解一下有关全屏,隐藏状态栏导航栏,沉浸式的知识. 在Android4.1之 ...
- android 沉浸式菜单栏,Android沉浸式全屏讲解(状态栏、导航栏处理)
Android应用中经常会有一些要求全屏显隐状态栏导航栏的需求.通过全屏沉浸式的处理可以让应用达到更好的显示效果.下面系统的讲解一下有关全屏,隐藏状态栏导航栏,沉浸式的知识. 在Android4.1之 ...
- Android 沉浸式透明状态栏与导航栏
Android 系统自4.2 开始 UI 上就没多大改变,4.4 也只是增加了透明状态栏与导航栏的功能 这个特性是andorid4.4支持的,最少要api19才可以使用.下面介绍一下使用的方法,非常得 ...
- android沉浸式模式简书,Android 沉浸式模式与常见状态栏和导航栏效果
Android沉浸式模式 官方称沉浸式状态栏为沉浸式模式. 什么是沉浸式? 沉浸式就是让人专注当前的(由设计者营造)情境下感到愉悦和满足,而忘记真实的情境. 什么是Android中的沉浸式? 当启用该 ...
最新文章
- 如何获取cURL以不显示进度栏?
- luogu2024 食物链
- 聚焦 | 阿里灵杰AI工程化峰会来了
- 字节流和字符流哪个不刷新_不喜欢节流吗?
- Python操作mySql数据库封装类
- Fragment 和 FragmentActivity的使用(二)
- 谷歌地图高精度模型提取4(完结篇)
- Macbook Pro 安装 win10 单操作系统
- 国外开放知识图谱_什么是开放知识,如何传播?
- 微博、QQ、微信第三方登录 Java 实现实录
- 支付宝"手机网站支付"主域名申请了,二级域名还要申请吗
- 格式化代码_格式化代码是什么意思​
- matlab仿真的窄带带通滤波算法移植单片机没有达到仿真效果-总结
- 思科cisoc 路由器IKEv2配置ipsec tunnel口隧道
- Go实战--Gorilla web toolkit使用之gorilla/sessions(iris+sessions)
- windows10下载软件下到一半显示需要授权怎么解决
- NVL和COALESCE的区别
- Java基础:this关键字可在方法参数和成员变量同名时进行区分
- SQL注入攻防入门详解
- 利用云服务器接收微信消息,使用脚本实现云之家(类似微信)接收zabbix报警消息...
热门文章
- Check It Again: Progressive Visual Question Answering via Visual Entailment 论文笔记
- SilkTest武林外史之7-简单web测试
- 这40个冷知识,据说只有1%的人知道……颠覆你的认知!
- jibx进行xml数据绑定的binging.xml配置
- html 文档在线查看,在网页中在线查看文档(doc、docx 、xls 、xlsx、 pdf 、swf )
- Ural_1671. Anansi's Cobweb(并查集)
- SH7218T拆解手记(4)修改外屏大时钟
- 【华为OD机试真题】促销活动(货币兑换)100%通过率
- Phun-有趣的二维物理引擎
- Latex Table 合并行/列详解