Android记录 透明状态栏+固化的沉浸模式的简单实现
代码中实现透明状态栏的方法:
public class MainActivity extends AppCompatActivity { private ActivityMainBinding _binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); translationStatusBar(); _binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(_binding.getRoot()); } // 透明状态栏 private void translationStatusBar() { if (Build.VERSION.SDK_INT >= 19) { View decorView = getWindow().getDecorView(); // 此时使用 View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 时界面会和导航栏重叠 decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); getWindow().setStatusBarColor(Color.TRANSPARENT); } getSupportActionBar().hide(); } }
代码中简单实现固化的沉浸模式的方法:
public class MainActivity2 extends AppCompatActivity { private ActivityMainBinding _binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setFullscreenAndNoNavigation(); _binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(_binding.getRoot()); } // 沉浸模式 private void setFullscreenAndNoNavigation() { View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN|View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); ActionBar actionBar = getSupportActionBar(); actionBar.hide(); } // 沉浸模式、保持 @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); //判断4.4以上版本 if (hasFocus && Build.VERSION.SDK_INT >= 19) { //获得DecorView View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE //来帮助你的app来维持一个稳定的布局 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION //确保appUI的主要部分不会因为被系统导航栏覆盖而结束 | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN //确保appUI的主要部分不会因为被系统状态栏覆盖而结束 | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION //隐藏导航栏 | View.SYSTEM_UI_FLAG_FULLSCREEN //表示全屏,会将状态栏隐藏,只会隐藏状态栏 | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); // SYSTEM_UI_FLAG_IMMERSIVE 非粘性的沉浸式 // SYSTEM_UI_FLAG_IMMERSIVE_STICKY 粘性的沉浸式 } } }