Android开发之自定义状态栏背景色的实现

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

      

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值