使用setBackgroundTintList

时间:2015-07-27 20:42:17

标签: android floating-action-button

我遇到的问题是,通过在设计库中设置FloatingActionButton的背景,屏幕上恰好出现的任何其他FloatingActionButton视图采用与原始设置相同的颜色

左侧是运行API 21的设备上的应用程序的屏幕截图。在右侧,设备运行API 22,FloatingActionButtons都具有相同的颜色,尽管它们的颜色设置不同

API 21 API 22

我在空白的应用程序中对此进行了测试。以下是activity_main的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:paddingBottom="@dimen/activity_vertical_margin"
            tools:context=".MainActivity">

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_2"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_margin="16dp"
        app:borderWidth="0dp"
        app:elevation="4dp"
        app:fabSize="normal" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_1"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:layout_toLeftOf="@id/fab_2"
        app:borderWidth="0dp"
        app:elevation="4dp"
        app:fabSize="normal" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_3"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:layout_toRightOf="@id/fab_2"
        app:borderWidth="0dp"
        app:elevation="4dp"
        app:fabSize="normal" />

</RelativeLayout>

以下是MainActivity的相关代码。除此之外,应用程序中不存在其他代码。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Setting colors of first fab
    FloatingActionButton fab =
            (FloatingActionButton) findViewById(R.id.fab_1);
    setFloatingActionButtonColors(fab,
            getResources().getColor(R.color.blue),
            getResources().getColor(R.color.blue_dark));

    //Setting colors of second fab
    fab = (FloatingActionButton) findViewById(R.id.fab_2);
    setFloatingActionButtonColors(fab,
            getResources().getColor(R.color.red),
            getResources().getColor(R.color.red_dark));

    //Setting colors of third fab
    fab = (FloatingActionButton) findViewById(R.id.fab_3);
    setFloatingActionButtonColors(fab,
            getResources().getColor(R.color.green),
            getResources().getColor(R.color.green_dark));
}

private void setFloatingActionButtonColors(FloatingActionButton fab, int primaryColor, int rippleColor) {
    int[][] states = {
            {android.R.attr.state_enabled},
            {android.R.attr.state_pressed},
    };

    int[] colors = {
            primaryColor,
            rippleColor,
    };

    ColorStateList colorStateList = new ColorStateList(states, colors);
    fab.setBackgroundTintList(colorStateList);
}

最后,我使用上面的代码创建了一个简单的Android Studio项目,可以找到here。如果您想自己测试,项目中还有一些其他异常情况。

以前有人遇到过这样的问题吗?这是一个已知的错误,还是有解决方法?

2 个答案:

答案 0 :(得分:0)

所以看起来这是Android API 22的一个错误。我已经向Android问题跟踪器提交了错误报告。可以找到该票证here

目前,我没有解决方法,但如果找到,我会报告。

答案 1 :(得分:0)

谷歌https://code.google.com/p/android/issues/detail?id=201873

报道了类似问题

但在发布Android支持库后,修订版23.2.1(2016年3月)此错误已解决。

FloatingActionButton.setBackgroundTintList(@Nullable ColorStateList色调)不再更改背景颜色

将支持库更新为Android Support Library to 23.2.1