Android 状态栏,系统底部导航栏的隐藏和颜色切换 您所在的位置:网站首页 如何更改导航系统 Android 状态栏,系统底部导航栏的隐藏和颜色切换

Android 状态栏,系统底部导航栏的隐藏和颜色切换

2024-07-10 20:39| 来源: 网络整理| 查看: 265

前言: 本篇博文所用主题样式

1.状态栏

最上面这一行显示电池、时钟、wifi等图标是状态栏。 statusBarColor和colorPrimaryDark都可以改变状态栏的颜色,它们的区别就是如果两者都使用的话statusBarColor会覆盖colorPrimaryDark,statusBarColor的优先级高些。 改变状态栏背景颜色

1.1 黑底白字

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(Color.BLACK); } 1.2 白底黑字

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(Color.WHITE); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); } 1.3 图片延申入状态栏和底部导航栏

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); getWindow().setStatusBarColor(Color.TRANSPARENT); } 2. 系统底部导航栏

Android 系统底部导航方式可以分为三指导航和手势导航。 上图最下面的这个有三个按钮的是系统底部导航栏。如今的手机系统默认都是手势导航,当然在设置里可以切换成三指导航。改变navigationBarColor就可以改变底部导航栏的颜色。

3. 透明状态栏 getWindow().setStatusBarColor(Color.TRANSPARENT); 4. 透明导航栏 getWindow().setNavigationBarColor(Color.TRANSPARENT); 5. 沉浸式

整个页面都是图片,隐藏状态栏和底部导航栏。

public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); View decorView = getWindow().getDecorView(); int option = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(option); //使图片延申至刘海屏内,解决隐藏状态栏黑边问题 if (Build.VERSION.SDK_INT >= 28) { WindowManager.LayoutParams params = getWindow().getAttributes(); params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; getWindow().setAttributes(params); } } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus && 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); } } } 6. 隐藏状态栏 public void fullScreenMode() { Window window = getWindow(); window.getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.setNavigationBarColor(Color.TRANSPARENT); window.setStatusBarColor(Color.TRANSPARENT); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; getWindow().setAttributes(lp); } } 7. 小结: View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)。 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏顶部状态栏和虚拟导航栏,需要和View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION、View.SYSTEM_UI_FLAG_FULLSCREEN连用,不然会状态栏会变成白色或黑色,改变statusBarColor亦无用。

参考: https://blog.csdn.net/guolin_blog/article/details/51763825 https://blog.csdn.net/guolin_blog/article/details/103112795 https://blog.csdn.net/guolin_blog/article/details/125234545



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有