zoukankan      html  css  js  c++  java
  • Android 5.0以上Material Design 沉浸式状态栏

    偶然在知乎上看到这个问题,Android 5.0 如何实现将布局的内容延伸到状态栏,之前也见过多个应用的这个功能,但是知乎上的答案却没有一个真正实现此功能的
    一类是把标题栏设置App主题颜色,一类是提取App主题颜色然后设置成状态栏的颜色,这两种方法都只是设置了状态栏的背景色,而没有实现布局延伸到状态栏这个功能

    下面是综合网上的一些东西整理的,废话不说,看代码
    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()}对应的颜色。

  • 相关阅读:
    什么是RESTFUL?REST的请求方法有哪些,有什么区别?
    post提交的数据有哪几种编码格式?能否通过URL参数获取用户账户密码
    什么是jsp?jsp的内置对象有哪些?
    Session和Cookie的区别
    全面系统讲解CSS工作应用+面试一步搞定
    CSS实例:翻转图片、滚动图片栏、打开大门
    【HTML5版】导出Table数据并保存为Excel
    通过HTML5的getUserMedia实现拍照功能
    Day 19: EmberJS 入门指南
    18个基于 HTML5 Canvas 开发的图表库
  • 原文地址:https://www.cnblogs.com/zimengfang/p/5707656.html
Copyright © 2011-2022 走看看