Android 5.0以上Material Design 沉浸式状态栏

摘要:
8if(版本.SDK_INT>18}1920setContentView(R.layout.activity_main);window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS|WindowManager.LayeoutParams.FLAG_TRANSLUGENT_NAVITION);
偶然在知乎上看到这个问题,Android 5.0 如何实现将布局的内容延伸到状态栏,之前也见过多个应用的这个功能,但是知乎上的答案却没有一个真正实现此功能的
一类是把标题栏设置App主题颜色,一类是提取App主题颜色然后设置成状态栏的颜色,这两种方法都只是设置了状态栏的背景色,而没有实现布局延伸到状态栏这个功能
Android 5.0以上Material Design 沉浸式状态栏第1张

下面是综合网上的一些东西整理的,废话不说,看代码
1
public class MainActivity extends Activity { 2 3 @SuppressLint("InlinedApi") 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 getWindow().requestFeature(Window.FEATURE_NO_TITLE); 8 if(VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { 9 Window window = getWindow(); 10 window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS 11 | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); 12 window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 13 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 14 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); 15 window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 16 window.setStatusBarColor(Color.TRANSPARENT); 17 window.setNavigationBarColor(Color.TRANSPARENT); 18 } 19 20 setContentView(R.layout.activity_main); 21 } 22 }

1, 第一次见到InlinedApi这个注解,网上给出的解释是
"InlinedApi": Finds inlined fields that may or may not work on older platforms
大致意思是低版本的SDK可能不会起作用,这个可以不用管

2,
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
                     | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.clearFlags 源码:
public void clearFlags(int flags) {
    setFlags(0, flags);
}
FLAG_TRANSLUCENT_STATUS //透明状态栏
FLAG_TRANSLUCENT_NAVIGATION //透明导航栏
3, setSystemUiVisibility这个方法参数表示的状态比较多,具体如下:

    1. View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)。

    2. View.INVISIBLE:隐藏状态栏,同时Activity会伸展全屏显示。

    3. View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。

    4. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。

    5. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

    6. View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

    7. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏虚拟按键(导航栏)。有些手机会用虚拟按键来代替物理按键。

    8. View.SYSTEM_UI_FLAG_LOW_PROFILE:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。

4,
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
Flag表明这个窗口负责绘制系统状态栏标题栏的背景。如果设置,系统bar绘制成透明背景,在这个窗口相应的地方会填充{@link Window#getStatusBarColor()}和{@link Window#getNavigationBarColor()}对应的颜色。

免责声明:文章转载自《Android 5.0以上Material Design 沉浸式状态栏》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ADOEF连接字符串问题Xcode --自动注释插件VVDocumenter-Xcode(配置须知)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Zookeeper四字命令

ZooKeeper 支持某些特定的四字命令(The Four Letter Words)与其进行交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令。 ZooKeeper 常用四字命令主要如下: ZooKeeper四字命令 功能描述...

GIT : IDEA切换到某个tag

背景看一本presto的书,发现版本用的是presto-0.107这个版本。然后我去Apache clone下源码,发现分支只有几个,但是下载页面却有很多不同的版本 然后看Tag发现有很多。 然后我现在需要 0.107版本的,发现上面没有,百度一下可以git到某个TAG点击后填入你的tag名称,我填写的是 0.107,然后就可以git到相关的代码了。 但是...

Thinkpad 笔记本待机亮度变低解决办法

        当你发现笔记本从待机恢复后,屏幕亮度变低,即使你调节亮度,它也很低而且亮度并不正常的。解决办法就是拔掉电源,然后重新插上,亮度就能恢复。当然我之前都是重启电脑解决。         但是,有的时候却不会变低。这是为什么呢?大家可以做这样一个实验:在待机的时候,笔记本有插电源和不插电源之分,插电源代表A,不插电源代表B。从待机恢复也有插电源和...

2018年全国职业院校技能大赛(中职组)网络空间安全赛题解析

2019年12月2号 星期一 CQCET 2018年全国职业院校技能大赛中职组 “网络空间安全”赛卷一 一、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 单兵模式系统渗透测试 任务1 ARP扫描渗透测试 100分钟 100 任务2 漏洞扫描与利用 100 任务3 MSSQL数据库渗透测试 100 任务4 主机发现与信息收 100 任...

Google-Guava Concurrent包里的Service框架浅析

原文地址  译文地址 译者:何一昕 校对:方腾飞 概述 Guava包里的Service接口用于封装一个服务对象的运行状态、包括start和stop等方法。例如web服务器,RPC服务器、计时器等可以实现这个接口。对此类服务的状态管理并不轻松、需要对服务的开启/关闭进行妥善管理、特别是在多线程环境下尤为复杂。Guava包提供了一些基础类帮助你管理复杂的状态转...

Commit Monitor–svn监控工具

SVN更改通知的工具,在这里分享给大家。 自己负责的模块代码有时被同事修改,但是没有知会,也不容易了解到具体的改动内容,可能造成各种各样的问题。这里推荐一个工具Commit Monitor,可以监控svn仓库的提交记录,并及时通知,非常方便。一切尽在掌握。 下载地址,开源软件,可以放心~ http://code.google.com/p/commitmon...