天天看點

沉浸式模式透明通知欄小記

最近在項目上要求做沉浸式模式透明通知欄,百度了一大堆,感覺千篇一律,雖然基本都有用,但是用起來還是有各種各樣要麼點選界面通知欄重新出現、要麼其他控件擷取焦點時通知欄重新出現、要麼有

EditText

編輯時通知欄重新出現等等一系列問題,然後參考了好幾篇博文,自己寫了個demo試了下效果還可以,現記錄如下:

1、在activity(要求繼承

AppCompatActivity

)的

onCreate

方法中添加如下代碼:

super.onCreate(savedInstanceState);
      **requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        View view = LayoutInflater.from(this).inflate(R.layout.activity_lottery_list, null);
        setContentView(view);
        HideUIUtil.hideUi(this,getSupportActionBar());
        view.setOnSystemUiVisibilityChangeListener(visibility -> {
            if (visibility == View.VISIBLE) HideUIUtil.hideUi(this,getSupportActionBar());
        });**
           

其中的

hideUi

方法的方法體如下:

if (android.os.Build.VERSION.SDK_INT >= 21) {
            View decorView = activity.getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            decorView.setSystemUiVisibility(option);
            activity.getWindow().setNavigationBarColor(Color.TRANSPARENT);
            activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
        }
        if (actionBar != null) actionBar.hide();
           

2、重寫目前界面的

onWindowFocusChanged

方法,并在方法體中設定一些目前需要隐藏的屬性:

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus && android.os.Build.VERSION.SDK_INT >= 19) {
            View decorView = getWindow().getDecorView();
            decorView.setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
        }
    }
           

主要的參考博文是來自郭大神兩年前的一篇文章,下面是大神的原博文傳送門:

(https://blog.csdn.net/guolin_blog/article/details/51763825)