状态栏使用详解
来源:互联网 发布:淘宝男装 编辑:程序博客网 时间:2024/06/15 08:50
在SDK21以后,系统为我们提供了修改状态栏的方法,有时候我们需要类似全屏状态,但是还要显示状态栏,这时候我们需要把状态栏背景颜色设置为全屏;有时候我们需要状态栏颜色与activity上边title颜色保持一致,如果状态栏是白色的,我们还需要修改状态栏中图标的颜色。
首先做一个判断
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
然后在你的activity的XML文件中设置
android:fitsSystemWindows="true"
//因为下面的方法都会通过setSystemUiVisibility方法设置为全屏同时状态栏不会被覆盖掉,如果不设置这个,会遮盖掉部分布局。
下面就是设置你的状态栏的代码:
其中setStatusBarColor是设置状态栏的颜色
method.invoke是设置状态栏的图标的颜色
Window window=mainActivity.getWindow(); 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(getColor(R.color.colorBackground)); Class clazz = window.getClass(); try { Method method= clazz.getMethod("setStatusBarIconColor", int.class); method.invoke(window, Color.BLACK); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }
同时讲解一下setSystemUiVisibility中的设置的状态的意思:
1. View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)。 2. View.INVISIBLE:隐藏状态栏,同时Activity会伸展全屏显示。 3. View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。 4. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。 5. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 6. View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 7. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏虚拟按键(导航栏)。有些手机会用虚拟按键来代替物理按键。 8. View.SYSTEM_UI_FLAG_LOW_PROFILE:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。// SYSTEM_UI_FLAG_LAYOUT_STABLE:防止系统栏隐藏时内容区域大小发生变化
PS:补充一下,小米手机的状态栏需要单独适配,这里直接贴出适配方案。
因为状态栏一般默认主题是白色的,这里的效果是灰色背景和黑色字体,如果需要别的颜色的背景的话,可以在后面通过上面的方法单独设置。
public void setStatusBarDarkMode(boolean darkmode, Activity activity) { Class<? extends Window> clazz = activity.getWindow().getClass(); try { int darkModeFlag = 0; Class<?> layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams"); Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); darkModeFlag = field.getInt(layoutParams); Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class); extraFlagField.invoke(activity.getWindow(), darkmode ? darkModeFlag : 0, darkModeFlag); if(darkmode){ Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); }else{ int flag = activity.getWindow().getDecorView().getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; window.getDecorView().setSystemUiVisibility(flag); } } catch (Exception e) { e.printStackTrace(); }}
阅读全文
0 0
- 状态栏的使用详解
- 状态栏使用详解
- MFC状态栏的使用详解
- 简单易懂的状态栏使用详解(2)---状态栏改颜色
- 状态栏使用
- 使用状态栏
- 鸡啄米vc++2010系列37(状态栏的使用详解)
- Android_Notification通知状态栏详解
- 状态栏notification、notificationmanager详解
- Android 状态栏通知详解
- Notification(状态栏通知)详解
- iOS状态栏UIStatusBar详解
- iOS状态栏设置详解!
- iOS状态栏设置详解
- 简单易懂的沉浸式状态栏使用详解(1)——状态栏全透明(含虚拟按键适配)
- vc状态栏的使用
- vc状态栏的使用
- c#中使用状态栏
- Spring AOP实现方式
- 通过程序设计几何图形(Shape)、矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型, 能够利用接口和多态性计算几何图形的面积和周长并显示。
- Hbase 常用命令整理
- 带缓存的I/O和不带缓存的I/O的区别
- scrollview嵌套recycleview recycleview 不显示问题
- 状态栏使用详解
- 详细解释大数定理+中心极限定理(二)
- 使用highcharts绘制趋势图
- C# A*寻路算法代码
- 【C#】百钱百鸡
- spring cloud bug
- Git忽略规则和.gitignore规则不生效的解决办法
- 用vue封装插件并发布到npm
- 【区块链】以太坊 web3j for java 使用