美文网首页
沉浸式状态栏

沉浸式状态栏

作者: 瑜小贤 | 来源:发表于2019-10-14 19:01 被阅读0次

    一、Android4.4的处理方式

    1.主题方式

    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
    

    2.代码方式

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    

    二、Android5.0及以上的处理方式

    android5.0及以上可以设置状态栏的颜色,例如通过

    <item name="android:statusBarColor">#ff0000</item> //设置状态栏颜色
    

    而如果把这个颜色值设置成透明,并不能达到沉浸式效果,必须要对窗口进行设置:

    
     private void immersive(){
            //只能在4.4上实现沉浸式
            if(Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT){
                return;
            }
    
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
                Window window = getWindow();
                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(Color.TRANSPARENT);
    
                int visibility = window.getDecorView().getSystemUiVisibility();
                //布局全屏展示
                visibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
                //方式内容区域大小发生变化
                visibility |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
                //隐藏底部虚拟导航栏
    //            visibility |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
                window.getDecorView().setSystemUiVisibility(visibility);
                //!!!这样设置的状态栏是没有阴影效果的
            }else{
               getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            }
        }
    
    
    //获取状态栏高度
    public int getStatusBarHeight(Context context){
            int resId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
            if(resId > 0){
                return context.getResources().getDimensionPixelSize(resId);
            }
            return 0;
        }
    
    
    //给头部布局增加高度以及padding
    public void setHeightAndPadding(Context context, View view){
            ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
            layoutParams.height += getStatusBarHeight(context);
            view.setPadding(view.getPaddingLeft(), view.getTop()+getStatusBarHeight(context), view.getPaddingRight(), view.getPaddingBottom());
    }
    
    
    

    但是注意,这种代码方式设置之后,沉浸式的状态栏是没有阴影效果的,整个状态栏是透明状态,如果还想要状态栏有阴影状态,需要使用主题方式 + 顶层布局的背景与属性同时设置的方式,才能实现。

    android:background="#00ffff"
    android:fitsSystemWindows="true"
    

    相关文章

      网友评论

          本文标题:沉浸式状态栏

          本文链接:https://www.haomeiwen.com/subject/lzdyyctx.html