android 4.4版本以上透明状态栏的简单实现

开发中,设计图照着苹果来的(/(ㄒoㄒ)/~~),导航栏颜色的设置直接影响美观和用户体验,kitkat4.4及其以下版本先不管,4.4以上版本还是很有希望实现的,且往下看。

准备工作:首先在res文件下新建一个values-v21文件夹,在该文件下新建一个style.xml文件,style.xml文件里的所有属性都是针对api21及其以上版本设置的。

设置顶部透明状态栏:

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

看效果:
这里写图片描述

可以看到设置该属性后,界面被拉伸到顶部。

如果想要代码动态设置,效果一样的:

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window window = getWindow();
            WindowManager.LayoutParams attributes = window.getAttributes();
            attributes.flags |= WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
            window.setAttributes(attributes);
        }

去除顶部灰色阴影:

android:windowTranslucentStatus 属性并不能完美呈现出像ios应用的导航栏效果,顶部多了层灰色半透明阴影,如何去掉这个效果奈,看下面代码:

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE)
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
            window.setStatusBarColor(Color.TRANSPARENT)
        }

效果图:
这里写图片描述

解决置顶问题:

上面的设置会导致布局整体拉伸到状态栏顶部,就像第一张图一样,这并不是我们想要的效果。如果能够获取状态栏的高度,设置对应控件的paddingTop,问题不就可以解决了嘛。

1、获取状态栏高度

由于每个手机分辨率不一样,状态栏的高度肯定不能设置成一个固定值,只能动态获取了:

    public int getStatusBarHeight() {
        int result = 0;
        int resourceId = getContext().getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = getContext().getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }
2、动态设置paddingTop
  final ViewGroup linear_bar = (ViewGroup) activity.findViewById(title_id); // 所需要设置控件
  linear_bar.post(new Runnable() {
                @Override
                public void run() {
                    linear_bar.setPadding(0, getStatusBarHeight(activity), 0, 0);
                }
            });

效果图:

这里写图片描述

设置底部导航栏透

明:

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

效果图:

这里写图片描述

代码设置:

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window window = getWindow();
            WindowManager.LayoutParams attributes = window.getAttributes();
            attributes.flags |= WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
            window.setAttributes(attributes);
        }

关于源码,请戳https://github.com/jjjSilence/jjjPlus ,在白天/ 夜晚切换里面O(∩_∩)O

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值