android开发修改状态栏背景色和图标颜色的示例

android开发修改状态栏背景色和图标颜色的示例,第1张

概述本文介绍了android开发修改状态栏背景色和图标颜色的示例,分享给大家,具体如下:

本文介绍了androID开发修改状态栏背景色和图标颜色的示例,分享给大家,具体如下:

修改状态栏背景色和图标颜色

默认是黑底白字的,现在要改为白底黑字的

先看下效果图:

  

1、状态栏背景是白色: 在style中设置

<item name="colorPrimaryDark">@color/white</item>

2、写修改状态栏图标的颜色(暂时只知道黑色和白色)

public class StatusbarUtil {/** * 修改状态栏为全透明 * @param activity */@TargetAPI(19)public static voID transparencybar(Activity activity){ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LolliPOP) { Window window = activity.getwindow(); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 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(color.transparent); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window window =activity.getwindow(); window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); }}/** * 修改状态栏颜色,支持4.4以上版本 * @param activity * @param colorID */public static voID setStatusbarcolor(Activity activity,int colorID) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LolliPOP) { Window window = activity.getwindow();  //window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYstem_bar_BACKGROUNDS); //window.getDecorVIEw().setsystemUIVisibility( VIEw.SYstem_UI_FLAG_liGHT_STATUS_bar); window.setStatusbarcolor(activity.getResources().getcolor(colorID)); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //使用SystembarTint库使4.4版本状态栏变色,需要先将状态栏设置为透明 transparencybar(activity); SystembarTintManager tintManager = new SystembarTintManager(activity); tintManager.setStatusbarTintEnabled(true); tintManager.setStatusbarTintResource(colorID); }}/** *状态栏亮色模式,设置状态栏黑色文字、图标, * 适配4.4以上版本MiuiV、Flyme和6.0以上版本其他AndroID * @param activity * @return 1:MIUUI 2:Flyme 3:androID6.0 */public static int statusbarlightmode(Activity activity){ int result=0; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if(MiuiSetStatusbarlightmode(activity,true)){  result=1; }else if(FlymeSetStatusbarlightmode(activity.getwindow(),true)){  result=2; }else {  activity.getwindow().getDecorVIEw().setsystemUIVisibility( VIEw.SYstem_UI_FLAG_LAYOUT_FulLSCREEN|VIEw.SYstem_UI_FLAG_liGHT_STATUS_bar);  result=3; } } return result;}/** * 设置状态栏图标为深色和魅族特定的文字风格 * 可以用来判断是否为Flyme用户 * @param window 需要设置的窗口 * @param dark 是否把状态栏文字及图标颜色设置为深色 * @return boolean 成功执行返回true * */public static boolean FlymeSetStatusbarlightmode(Window window,boolean dark) { boolean result = false; if (window != null) { try {  WindowManager.LayoutParams lp = window.getAttributes();  FIEld darkFlag = WindowManager.LayoutParams.class   .getDeclaredFIEld("MEIZU_FLAG_DARK_STATUS_bar_ICON");  FIEld meizuFlags = WindowManager.LayoutParams.class   .getDeclaredFIEld("meizuFlags");  darkFlag.setAccessible(true);  meizuFlags.setAccessible(true);  int bit = darkFlag.getInt(null);  int value = meizuFlags.getInt(lp);  if (dark) {  value |= bit;  } else {  value &= ~bit;  }  meizuFlags.setInt(lp,value);  window.setAttributes(lp);  result = true; } catch (Exception e) { } } return result;}/** * 需要MiuiV6以上 * @param activity * @param dark 是否把状态栏文字及图标颜色设置为深色 * @return boolean 成功执行返回true * */public static boolean MiuiSetStatusbarlightmode(Activity activity,boolean dark) { boolean result = false; Window window=activity.getwindow(); if (window != null) { Class clazz = window.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);  if(dark){  extraFlagFIEld.invoke(window,darkModeFlag,darkModeFlag);//状态栏透明且黑色字体  }else{  extraFlagFIEld.invoke(window,darkModeFlag);//清除黑色字体  }  result=true;  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {  //开发版 7.7.13 及以后版本采用了系统API,旧方法无效但不会报错,所以两个方式都要加上  if(dark){   activity.getwindow().getDecorVIEw().setsystemUIVisibility( VIEw.SYstem_UI_FLAG_LAYOUT_FulLSCREEN| VIEw.SYstem_UI_FLAG_liGHT_STATUS_bar);  }else {   activity.getwindow().getDecorVIEw().setsystemUIVisibility(VIEw.SYstem_UI_FLAG_VISIBLE);  }  } }catch (Exception e){ } } return result;}}

上面代码是https://www.oudahe.com/p/38718/ 上找到,具体可以去看看

3、具体引用列子在BaseActivity中

@OverrIDeprotected voID onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityUtils.add(this,getClass()); mContext = this; StatusbarUtil.statusbarlightmode(this);}

4、正常状态栏已经改变

状态栏是改变了,但你会看到整个activity布局都会上移充满整个屏幕

解决方法1:在style中的Apptheme添加

<item name="androID:fitsSystemwindows">true</item>
如果添加上面代码布局下移了且不会影响到其他的东西。那就不用往下看了

androID:fitsSystemwindows很坑,很多d框的样式都有问题

解决方法2:自己为每个布局添加paddingtop

libUtils:

/** * 获取状态栏高度 * @return */public static int getStatusbarHeight(Context context) { int result = 0; int resourceID = context.getResources().getIDentifIEr("status_bar_height","dimen","androID"); if (resourceID > 0) {  result = context.getResources().getDimensionPixelSize(resourceID); } return result;}//设置布局距离状态栏高度public static voID setLayoutpadding(Activity activity,VIEw contentLayout) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  contentLayout    .setpadding(contentLayout.getpaddingleft(),getStatusbarHeight(activity) + contentLayout.getpaddingtop(),contentLayout.getpaddingRight(),contentLayout.getpaddingBottom()); }}

引用地方:

protected voID onCreate(@NonNull Bundle savedInstanceState,int resID,int TitleID) { super.onCreate(savedInstanceState); mContext = this; setContentVIEw(R.layout.activity_base); StatusbarUtil.statusbarlightmode(this); libUtils.setLayoutpadding(this,((VIEwGroup)findVIEwByID(androID.R.ID.content)).getChildAt(0));}

注:libUtils.setLayoutpadding调用要做setContentVIEw后面,androID.R.ID.content是获取每个布局的根布局,不理解自行百度

还要考虑androID版本的问题,一般5.0下的系统还是用默认的

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的android开发修改状态栏背景色和图标颜色的示例全部内容,希望文章能够帮你解决android开发修改状态栏背景色和图标颜色的示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1143154.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存