FloatingActionButton 动态改变各状态颜色

动态改变FloatingActionButton的背景颜色

设置fab的背景颜色时,使用

fab.setBackgroundColor(Color.WHITE);

是无效的,很苦恼,到方法里看看

    public void setBackgroundColor(int color) {
        Log.i("FloatingActionButton", "Setting a custom background is not supported.");
    }

居然只是给打印了条日志…

再找到下面这个方法:

fab.setBackgroundTintList();

参数需要传入ColorStateList,那ColorStateList 又是啥呢?

ColorStateList

ColorStateList对象可以在XML中定义
像color一样使用,它能根据它应用到的View对象的状态实时改变颜色。例如,Button可以存在多种状态(pressed、focused或other),如果使用ColorStateList,你就能为它的每个状态提供不同的颜色。

你可以在XML文件中描述状态列表。每种颜色定义在一个元素里,放在单个元素里。每个使用不同的特性来描述在何种状态下使用。

当每次状态改变时,StateList都会从上到下遍历一次,第一个匹配当前状态的item将被使用——选择的过程不是基于“最佳匹配”,只是符合state的最低标准的第一个item。

注意:如果你想提供一个静态的color资源,使用简单的Color值。

  1. 首先添加一个ColorStateList资源XML文件,XML文件保存在res/color/yourname.xml:
<?xml version="1.0" encoding="utf-8"?>  
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
    <item android:state_pressed="true"  android:color="#ffff0000"/> 
    <item android:state_focused="true"  android:color="#ff0000ff"/> 
    <item android:color="#ff000000"/> 
</selector> 
  1. 使用
Resources resource=(Resources)getBaseContext().getResources();   
ColorStateList csl=(ColorStateList)resource.getColorStateList(R.color.yourname); 

或者可以在代码中创建

 private ColorStateList createColorStateList(int normal, int pressed, int focused, int unable) {
        int[] colors = new int[] { pressed, focused, normal, focused, unable, normal };
        int[][] states = new int[6][];
        states[0] = new int[] { android.R.attr.state_pressed, android.R.attr.state_enabled };
        states[1] = new int[] { android.R.attr.state_enabled, android.R.attr.state_focused };
        states[2] = new int[] { android.R.attr.state_enabled };
        states[3] = new int[] { android.R.attr.state_focused };
        states[4] = new int[] { android.R.attr.state_window_focused };
        states[5] = new int[] {};
        ColorStateList colorList = new ColorStateList(states, colors);
        return colorList;
    }

使用 可以根据自己的需求定义颜色:

fab.setBackgroundTintList(createColorStateList(0xffffff00, 0xffffff00, 0xff0000ff, 0xffff0000));

这样 不仅可以动态改变fab的颜色 更是可以对应到每一个按钮的状态!

ColorStateList同样可以应用到textview button中来改变颜色.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值