我遇到的问题是,通过在设计库中设置FloatingActionButton
的背景,屏幕上恰好出现的任何其他FloatingActionButton
视图采用与原始设置相同的颜色
左侧是运行API 21的设备上的应用程序的屏幕截图。在右侧,设备运行API 22,FloatingActionButtons
都具有相同的颜色,尽管它们的颜色设置不同
我在空白的应用程序中对此进行了测试。以下是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。如果您想自己测试,项目中还有一些其他异常情况。
以前有人遇到过这样的问题吗?这是一个已知的错误,还是有解决方法?
答案 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