У меня возникла проблема, когда, установив фон в FloatingActionButton
в библиотеке Design, любые другие изображения, которые, случается, находятся на экране, принимают тот же цвет, который был установлен на оригинале ,Настройка цвета фона FloatingActionButton с помощью setBackgroundTintList
Слева находится скриншот приложения на устройстве с API 21. Справа на устройстве работает API 22, а FloatingActionButtons
имеют одинаковый цвет, несмотря на то, что их цвет устанавливается по-разному для каждого.
Я испытал это в пустом приложении. Вот XML для activity_main
:
<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-студия с вышеуказанным кодом, который можно найти here. В проекте есть некоторые дополнительные отклонения, если вы хотите проверить себя.
Неужели кто-нибудь сталкивался с такой проблемой раньше? Это известная ошибка, или есть обходной путь?
Я была аналогичная проблема, но с установкой фрагментов! - Я установил несколько фрагментов в onCreate, но вернул только один из фрагментов для всех позиций viewPager - наконец, один человек сказал, что установить фрагмент в onResume не в одном onCreate! - U может проверить это решение - я не уверен, но, возможно, внесет вклад! – Saeid