沉浸式状态栏

最近项目要实现沉浸式状态栏,沉浸式状态栏只有4.4以上才能实现。4.4是渐变色  5.x以上是完全透明

4.4的显示效果



5.x以后的显示效果



在程序里面直接写上这一句就OK了,简单方便




首先这个fitview就是title的布局,得保证fitview已经被findViewById.

 public static void setTranslucentBar(View view, Activity activity) {
        if (!isSdkSupport()) {
            return;
        }
        setTranslucentStatus(activity);
        setTranslucentTransparent(activity);
        fitStatusBar(view, activity);
    }


isSdkSupport()方法是判断Build 版本是否是在19以上 

 public static boolean isSdkSupport() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            return true;
        }
        return false;
    }

setTranslucentStatus(activity)  就是设置沉浸式

 @TargetApi(19)
    private static void setTranslucentStatus(Activity activity) {
        Window window = activity.getWindow();
        WindowManager.LayoutParams layoutParams = window.getAttributes();
        final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
        layoutParams.flags |= bits;
        window.setAttributes(layoutParams);
    }

到这里,就完成状态栏 但是 在5.x上面可以把状态栏设置成透明,也就是setTranslucentTransparent(activity)方法


  private static void setTranslucentTransparent(Activity activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = activity.getWindow();
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.TRANSPARENT);
        }
    }


完成到这里的效果

title的布局都显示在状态栏了 这就不好了,那怎么解决这个方法呢?

我们直接给title布局的高度多加一个状态栏的高度不就可以了吗?

这也就是fitStatusBar(fitview,activity)的方法了。


private static void fitStatusBar(View fitView, Activity activity) {
        ViewGroup.LayoutParams layoutParams = fitView.getLayoutParams();
        int paddingleft=fitView.getPaddingLeft();
        int paddingright=fitView.getPaddingRight();
        int paddingtop=fitView.getPaddingTop()+DeviceUtil.getStatusBarHeight(activity);
        int paddingbuttom=fitView.getPaddingBottom();
        layoutParams.height+=DeviceUtil.getStatusBarHeight(activity);
        fitView.setPadding(paddingleft, paddingtop, paddingright, paddingbuttom);
    }

最后给出DeviceUtil.getStatusBarHeight方法

public static  int getStatusBarHeight(Activity mActivity){
        int resourceId = mActivity.getResources().getIdentifier("status_bar_height", "dimen", "android");
        return mActivity.getResources().getDimensionPixelSize(resourceId);
    }


以上内容只是针对单个页面,如果要应用到整个项目中,就只需要

ViewGroup contentFrameLayout = (ViewGroup) findViewById(Window.ID_ANDROID_CONTENT);
ViewGroup parentView = (ViewGroup) contentFrameLayout.getChildAt(0);
TranslucentBarUtil.setTranslucentBar(parentView.getChildAt(0),this);


Window.ID_ANDROID_CONTENT:The ID that the main layout in the XML layout file should have(XML中显示区域根视图的ID值,该视图由系统自动生成,未在XML中定义)

parentView 就是xml布局的根文件   这个就看自己的跟布局是什么自己对应就行了 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值