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