Android改变了FAB的颜色

时间:2015-03-17 23:23:26

标签: android android-drawable

SDK浮动操作按钮中的示例我有一个drawable

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
    <ripple android:color="@color/primary_light">
        <item>
            <shape android:shape="oval">
                <solid android:color="@color/primary" />
            </shape>
        </item>
    </ripple>
</item>

<item>
    <ripple android:color="@color/primary_light">
        <item>
            <shape android:shape="oval">
                <solid android:color="@color/primary" />
            </shape>
        </item>
    </ripple>
</item>
</selector>

我正在设置TextView背景:

android:background="@drawable/fab_background"

我是否有办法访问fab_background或编辑我的TextView背景本身以更改我的FAB的颜色?

3 个答案:

答案 0 :(得分:5)

您可以通过在布局xml中设置<android.support.design.widget.FloatingActionButton>的以下属性来更改FAB的颜色:

app:backgroundTint="#ff0000"

答案 1 :(得分:0)

如果您要定位API 21+,则可以通过将基础drawable指定为@android:color/white并将颜色状态列表应用为色调来利用可绘制着色和可绘制颜色状态列表。

如果您想使用平台默认的波纹颜色,也可以选择利用可绘制主题。我在下面的示例中使用了它。

RES /值/ colors.xml:

<resources>
  <color name="fab_checked">...</color>
  <color name="fab_normal">...</color>
  ...
</resources>

RES /颜色/ fab_tint.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_checked="true"
        android:color="@color/fab_checked" />
  <item android:color="@color/fab_normal" />
</selector>

RES /抽拉/ fab.xml:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="?android:attr/colorControlHighlight">
    <item>
        <shape android:shape="oval"
               android:tint="@color/fab_tint">
            <solid android:color="@color/white" />
        </shape>
    </item>
</ripple>

如果您想动态更改色调,可以拨打Drawable.setTint(int)Drawable.setTintList(ColorStateList)

myFab.getDrawable().mutate().setTint(Color.RED);

如果您想保留选中状态颜色,可以创建一个新的ColorStateList并应用它。

ColorStateList csl = new ColorStateList(
    new int[][] {{android.R.attr.state_checked},{}},
    new int[] {Color.GREEN, Color.RED});
myFab.getDrawable().mutate().setTintList(csl);

答案 2 :(得分:0)

你可以试试这段代码,为我工作

            app:backgroundTint="@color/colorPrimaryDark"