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

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

先看下效果图:

Screenshot_2018-01-03-19-20-27-797_com.yiban1314..png

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

@color/white

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, 0, 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.jianshu.com/p/7f5a9969be53上找到,具体可以去看看

3、具体引用列子

在BaseActivity中

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

ActivityUtils.add(this, getClass());

mContext = this;

StatusBarUtil.statusBarLightMode(this);

}

4、正常状态栏已经改变

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

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

true

如果添加上面代码布局下移了且不会影响到其他的东西。那就不用往下看了

android:fitsSystemWindows很坑,很多弹框的样式都有问题

解决方法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开发修改状态栏背景色和图标颜色相关推荐

  1. android状态栏背景色和图标颜色更改总结

    通过若干种方法来实现状态栏背景和图标变色 注意事项:api 23才支持状态栏图标变色,所以图标变色会在编译api>=23中实现 一 Android 4.4 之前状态栏默认黑色,不能改变 二 An ...

  2. android开发 修改标题栏背景_Android哆啦A梦调试工具体验

    滴滴开发调试工具(https://github.com/didi/DoraemonKit)是滴滴开源的一款功能齐全的客户端( iOS .Android )研发助手 是什么 用图说话,这个调试工具其实就 ...

  3. Android 设置状态栏背景颜色和状态栏文字、图标颜色

    纯抄的,记录学习,感谢原文作者 原文:https://www.jianshu.com/p/5a54b2c3ea05 Android 4.4(API 19)之后,就提供了修改状态栏颜色的方法,但是在 A ...

  4. android开发 修改标题栏背景_移动开发整体凉凉的背景下,究竟还剩哪些 Android热门前沿知识...

    1. Android架构设计模式 MVC架构设计模式:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写. MVP架构 ...

  5. android开发 修改标题栏背景_基于.NET的APP开发方式中MobileForm的使用smobiler

    样式一 一. Toolbar 1. 目标样式 我们要实现上图中的效果,需要如下的操作: 2. 修改属性 a. 修改Mobile Form的Toolbar属性 获取窗体底部工具栏,打开集合编辑器,并点击 ...

  6. android开发 修改标题栏背景_更改标题栏(Android)中的文字和背景颜色?

    我构建了一个 Android应用程序,我正在尝试更改标题的栏背景和文本颜色. 在AndroidManifest.xml中: ... android:theme="@style/ThemeSe ...

  7. android 中间凹背景_Android开发仿百度地图的凹陷BottomNavigationView

    释放双眼,带上耳机,听听看~! 百度的: 71529789c6c948803e1075c2c7e00809.jpg 我的: e9347423eb2031228af77ad63d7b01d7.jpg 使 ...

  8. android引用的java包_Android开发中jar包的创建及引用

    jar包有两种,一种是纯粹的库功能,没有main入口函数,故无法直接执行:一种是包含main的可执行包! 如有hello/hello.java文件: $ cd hello/$ javac hello. ...

  9. android 代码设置居右_Android 开发实现EditText 光标居右显示

    Android 开发实现EditText 光标居右显示 前言: 有些时候肯定会遇到这种奇葩的需求,光标要靠右显示,因为Android里面光标默认是靠左显示的,那怎么实现呢,肯定有办法的,这里提供一种实 ...

最新文章

  1. go 1.4支持Android的说明(译文)
  2. pdf文件之itextpdf插入html内容以及中文解决方案
  3. SwfUpload及imgareaselect使用方法
  4. .net的字符串插值,格式化字符串
  5. 文巾解题 231. 2的幂
  6. 使用fio测试磁盘I/O性能
  7. c# ComboBox禁用鼠标滚轮
  8. SDUT 2138 图结构练习——BFSDFS——判断可达性
  9. 【转帖】MATLAB中用FDATool设计滤波器及使用
  10. JAVA HD japan_小米小爱AI音箱HD【硬件分析】,你了解智能音箱吗
  11. window常用设置和命令
  12. 谷歌浏览器导入插件教程
  13. matlab受力分析,基于Matlab的多支座蒸压釜的受力分析和强度计算
  14. 学习Linux/Unix这么久了,你真的知道什么是终端吗?
  15. 外设驱动库开发笔记33:LCD1602液晶显示屏驱动
  16. jQuery源码分析-10事件处理-Event-事件绑定与删除-bind/unbind+live/die+delegat/undelegate
  17. VOS3000,呼叫中心服务器和软交换状态显示红灯实际后台服务都在线的原因
  18. 解决WORD2013输入时光标老跳的问题
  19. 反掩码/掩码/通配符详解
  20. 我喜欢一个人白天静静走在城市的街头

热门文章

  1. 微信公众号最佳实践 ( 4.7)获取用户地理位置
  2. “AI安全”风起云涌,拿下A轮融资的瑞莱智慧如何与群雄共舞?
  3. 《从0到1:CTFer成长之路》SQL注入-2
  4. EasyClick iOS脚本免越狱免硬件实现方案_可云控大量部署
  5. 本周XR新闻:吴德周成立AR硬件公司,SideQuest支持PICO、Magic Leap
  6. 音频输出设备是如何决定的
  7. 罗尔定理与零点定理判断实际应用与判断
  8. matlab求解一阶微分方程组
  9. 参考file-convert-util工具,实现doc,docx,html,md,pdf,png转换
  10. 蓝奏云软件库源码分享下载