Изменение цвета кнопки действия (Floating Action Button) в Android
Я пытаюсь изменить цвет Material's Floating Action Button, но безуспешно.
<android.support.design.widget.FloatingActionButton
android:id="@+id/profile_edit_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="16dp"
android:clickable="true"
android:src="@drawable/ic_mode_edit_white_24dp" />
Я пробовал добавить:
android:background="@color/mycolor"
или через код:
FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.profile_edit_fab);
fab.setBackgroundColor(Color.parseColor("#mycolor"));
или
fab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#mycolor")));
Но ни один из этих методов не сработал. Я также пробовал решения из предложенного дублирующего вопроса, но ничего не помогло; кнопка осталась зеленой и стала квадратной.
P.S. Было бы неплохо также узнать, как добавить эффект ряби, с этим я тоже не разобрался.
5 ответ(ов)
Если вы пытаетесь изменить цвет плавающей кнопки действий (FAB) с помощью атрибута в XML, может возникнуть проблема с тем, что рамка кнопки имеет другой цвет. Чтобы исправить это, выполните следующие шаги:
- Убедитесь, что в вашем XML-коде кнопка имеет прозрачный цвет фона:
app:backgroundTint="@android:color/transparent"
- Затем в коде установите нужный цвет следующим образом:
actionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.white)));
Таким образом, вы сможете правильно изменить цвет FAB и избежать проблем с различием цветов рамки кнопки.
Вам следует использовать:
app:backgroundTint="@color/colorPrimary"
Не используйте:
android:backgroundTint="@color/colorPrimary"
Это связано с тем, что атрибут app:backgroundTint
позволяет использовать поддержку для фонов в различных версиях Android, в то время как android:backgroundTint
может не работать корректно на более старых устройствах. Используя app:
префикс, вы сможете избежать проблем с совместимостью.
FAB окрашен в соответствии с вашим colorAccent
.
<style name="AppTheme" parent="Base.Theme.AppCompat.Light">
<item name="colorAccent">@color/accent</item>
</style>
В приведенном примере вы определяете цвет акцента для вашей темы приложения. Это именно тот цвет, который будет использоваться для вашей плавающей кнопки действий (FAB). Убедитесь, что у вас правильно прописан ресурс @color/accent
в файле colors.xml
, чтобы цвет отобразился корректно.
Для того чтобы установить цвет фона для вашего FloatingActionButton
(mFab) в Android, вы можете использовать следующий код:
mFab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.mColor)));
Здесь ColorStateList.valueOf()
позволяет создать объект ColorStateList
из одиночного цвета. ContextCompat.getColor(mContext, R.color.mColor)
используется для получения цвета из ресурсов, обеспечивая совместимость с различными версиями Android.
Убедитесь, что вы заменили R.color.mColor
на ваш собственный ресурс цвета. Таким образом, эта строка кода устанавливает цвет фона для кнопки с учетом совместимости с разными версиями Android.
Другие решения также могут сработать. Однако, это подход "горилла в 10 фунтов", который имеет преимущество в своей широкой применимости как в данном случае, так и в подобных ситуациях:
styles.xml
:
<style name="AppTheme.FloatingAccentButtonOverlay" >
<item name="colorAccent">@color/colorFloatingActionBarAccent</item>
</style>
Ваш XML разметки:
<android.support.design.widget.FloatingActionButton
android:theme="@style/AppTheme.FloatingAccentButtonOverlay"
...
</android.support.design.widget.FloatingActionButton>
Не забудьте использовать правильную ссылку на стиль с помощью @style/
.
Как исправить 'android.os.NetworkOnMainThreadException'?
Ошибка «Необходимо переопределить метод суперкласса» после импорта проекта в Eclipse
Использование контекста в фрагменте
Как заставить Android-устройство вибрировать с разной частотой?
Room - Директория экспорта схемы не указана аннотационному процессору, не удается экспортировать схему