Android5.0以上去除狀態欄半透明遮罩

Android5.0+ 狀態欄 半透明灰色遮罩


安卓5.0及以上的版本,透明狀態欄有一層遮罩一樣的,相當於暗色,部分APP完美適配了透明狀態欄,狀態欄顏色和APP一體了,但是很多APP仍然是狀態欄和APP不是同一個顏色,應該如何修改systemui才能將那個暗色的遮罩去掉呢?

去除前效果

去除前

直接貼代碼,一目瞭然:

import android.annotation.TargetApi;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

import com.common.helper.R;
import com.readystatesoftware.systembartint.SystemBarTintManager;

/**
 * CN:      BaseActivity
 * Author: JSYL-DINGCL ([email protected])
 * Date:   2019/10/14
 * Des:    TODO:
 */
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //系統版本大於19
            setTranslucentStatus(true);
        }
        //狀態欄背景着色
        SystemBarTintManager tintManager = new SystemBarTintManager(this);
        tintManager.setStatusBarTintEnabled(true);
        tintManager.setStatusBarTintResource(R.drawable.shape_statusbar);

        //去除灰色遮罩
        //Android5.0以上
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = getWindow();
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            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);
        }else if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT){//Android4.4以上,5.0以下
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }
    }

    @TargetApi(19)
    public void setTranslucentStatus(boolean on) {
        Window win = getWindow();
        WindowManager.LayoutParams winParams = win.getAttributes();
        final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
        if (on) {
            winParams.flags |= bits;        // a|=b的意思就是把a和b按位或然後賦值給a   按位或的意思就是先把a和b都換成2進制,然後用或操作,相當於a=a|b
        } else {
            winParams.flags &= ~bits;        //&是位運算裏面,與運算  a&=b相當於 a = a&b  ~非運算符
        }
        win.setAttributes(winParams);
    }
}

	

shape_statusbar.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <gradient
        android:angle="180"
        android:startColor="@color/app_color_theme_1"
        android:endColor="@color/app_color_theme_3" />
</shape>

color:

 <color name="app_color_theme_alpha_1">#44EF5362</color> <!-- Grapefruit -->
 <color name="app_color_theme_alpha_3">#44FFCF47</color> <!-- Sunflower -->


去除後效果

after

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章