Android开发之自定义状态栏背景色的实现
来源:互联网 发布:2016年三月进出口数据 编辑:程序博客网 时间:2024/05/23 01:21
首先,低版本的Anroid系统并不支持状态栏颜色的修改,本文运行的代码都是在5.x系统上测试的。所以确保你的Android系统在5.0及以上版本,对应的SDK版本应在21及以上。
有两种方法可以改变系统状态栏的颜色:
1、主题中设置windowTranslucentStatus
属性
2、代码中调用方法: setStatusBarColor()
【第一种】主题中设置:
<resources> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowTranslucentStatus">true</item> </style></resources>如果设置了
windowTranslucentStatus
属性为true,则状态栏会变成半透明状态【第二种】,5.0以上系统提供了setStatusBarColor()去设置状态栏颜色
public class statusBarTest extends Activity{ @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.statusbar); } @Override public void onWindowFocusChanged(boolean hasFocus) { Window window = getWindow();// 获取当前显示的界面 window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.GREEN);// 设置颜色 }}创建活动,在活动获得焦点时设置状态栏颜色。运行上面的代码,你可能会发现,设置的状态栏颜色没有生效。因为刚刚在主题里设置了windowTranslucentStatus属性,设置了这个属性以后,代码里的setStatusBarColor()是不会有效果的。如果想设置更多颜色样式的状态栏,那就把这个属性去掉(因为这个属性只能实现状态栏的半透明样式)。
如果不想删除这个属性也可以,那就在代码中清除一下这个属性即可,修改如下:
public void onWindowFocusChanged(boolean hasFocus) { Window window = getWindow();// 获取当前显示的界面 window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);// 清除主题中设置的windowTranslucentStatus属性 window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.GREEN);}
重新运行代码,效果就出来了。
如果想让状态栏的颜色更加好看,也支持自定义颜色的使用。
由于项目的需要,对颜色的自定义稍微研究了一下。颜色的自定义是通过RGB三原色和一个alpha值来实现的。如果没有设置alpha值,那么默认是不透明的。
【方法一】:在xml资源文件中自定义颜色,然后通过id来调用。
形式是以井号(#)开始,后面是Alpha-Red-Green-Blue的格式。一般有四种形式:
#RGB
#ARGB
#RRGGBB
#AARRGGBB
比如用 #RGB 和 #RRGGBB 两种形式表示白色:
<?xml version="1.0" encoding="utf-8"?><resources> <color name="white1">#FFF</color> <color name="white2">#FFFFFF</color></resources>
#FFF 和 #FFFFFF 效果是一样的。不过习惯上一般使用的是 #RRGGBB 或者 #AARRGGBB 的形式。
【方法二】:在代码中直接自定义颜色
通过工具类 Color.java 的两个方法: rgb() 和 argb()
同样是由三原色原理来完成的。
以黑色为例:
public void onWindowFocusChanged(boolean hasFocus) {Window window = getWindow();window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(Color.argb(0x99,0x00,0x00,0x00));// 图左效果//window.setStatusBarColor(Color.rgb(0x00,0x00,0x00)); // 图右效果}图左设置了透明度,图右没有设置透明度,效果如下:
更多颜色通过三原色原理自由组合就可以了。
- Android开发之自定义状态栏背景色的实现
- android 改变状态栏的背景色
- android沉浸状态栏和顶部状态栏背景色的设置
- Android修改状态栏背景色
- Android学习之重载实现ListView的间隔背景色
- Android改变状态栏statusbar背景色
- android 沉浸式状态栏 背景色修改
- Android自定义ActionMode背景色
- Android自定义ActionMode背景色
- 自定义UINavigationBar的背景色
- 设置状态栏背景色
- android-沉浸状态栏以及状态栏背景色如何设置
- Android-沉浸状态栏以及状态栏背景色如何设置
- Android更改状态栏背景色之后,view被状态栏挡住
- Android中自定义ListView中各项的背景色
- android中自定义radiobutton的背景色选择默认图标
- Android RadioButton自定义背景色圆角样式的方法
- Android开发入门例程之动态改变背景色
- 视频跟踪——CMT算法
- EditText相关问题
- 从业两年前端工程狮需要具备哪些技能?
- 第六章--内排序
- 【算法和数据结构】1.4--数据结构之队列
- Android开发之自定义状态栏背景色的实现
- 技术面试准备手册
- 【软件测试】软件测试自动化
- 内存访问越界
- CSS3边框 圆角效果 border-radius
- 调整内核printk打印级别--减少启动时的打印信息
- android 打开一个选择拍照或是本地图库的Intent,接受此Intent返回的信息
- 字符串和字符串常数
- Linux中的gpio口使用方法