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()}对应的颜色。

  • 相关阅读:
    BZOJ5212 ZJOI2018历史(LCT)
    BZOJ5127 数据校验
    253. Meeting Rooms II
    311. Sparse Matrix Multiplication
    254. Factor Combinations
    250. Count Univalue Subtrees
    259. 3Sum Smaller
    156. Binary Tree Upside Down
    360. Sort Transformed Array
    348. Design Tic-Tac-Toe
  • 原文地址:https://www.cnblogs.com/zimengfang/p/5707656.html
Copyright © 2011-2022 走看看