Android中设置透明状态栏、黑白字体

2,119 阅读1分钟

不透明

    //1.设置不透明,再设置颜色
        <item name="android:windowIsTranslucent">false</item>//强制改成不透明
        activity.getWindow().setStatusBarColor(color);
    //2.设置透明,再通过设定全屏,增加与状态栏同高度的布局替代
        透明设置见下文
        

半透明

    <item name="android:windowTranslucentStatus">true</item>//半透明或全透明(机型版本有关)

透明

    <item name="android:windowIsTranslucent">true</item>//强制改成透明

状态栏悬浮在布局之上

    //改变状态栏对布局的挤压,让状态栏悬浮在布局之上
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

状态栏黑字体

    //设置状态栏黑色字体
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
    {
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
    }
    

DEMO

        //1.字体设置
        //改变状态栏对布局的挤压,让状态栏悬浮在布局之上:SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        //默认白字,黑字设置:SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
        {
            //可以使用黑字的api版本
            if(neddTran){
                //白字
                getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
            }else{
                //黑字
                getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
            }
        }else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            //白字
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
        }else{
            //白字
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
        }
        
        //2.状态栏透明设置
         //设置状态栏颜色为:透明
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
        {
            StatusBarUtils.compat(this);
        }else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            //只能是白字:
              if(neddTran){
                //需要状态栏透明的activity
                StatusBarUtils.compat(this);
             }else{
                //使用灰色底
                StatusBarUtils.compat(this, getColors(R.color.label));     
             }
        }else{
            //只能是白字
            if(neddTran){
                //需要状态栏透明的activity
                getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            }else{
                //使用系统本身的颜色或者灰色
                StatusBarUtils.compat(this, getColors(R.color.label));
            }
        }
        
        //3.设置状态栏颜色颜色StatusBarUtils
        public static void compat(Activity activity, int statusColor)
    { 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
        {
            int color = COLOR_DEFAULT;
            if (statusColor != INVALID_VAL)
            {
                color = statusColor;
            }
            activity.getWindow().setStatusBarColor(color);

        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build
                .VERSION_CODES.LOLLIPOP)
        {
            int color = COLOR_DEFAULT;
            ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
            if (statusColor != INVALID_VAL)
            {
                color = statusColor;
            }
            View statusBarView = new View(activity);
            ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams
                    .MATCH_PARENT, getStatusBarHeight(activity));
            statusBarView.setBackgroundColor(color);
            contentView.addView(statusBarView, lp);
        }
    }