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)); // 图右效果}
图左设置了透明度,图右没有设置透明度,效果如下

      

      更多颜色通过三原色原理自由组合就可以了。

1 0
原创粉丝点击