Изменение цвета кнопки действия (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
Как передать объект из одной активности в другую на Android
Использование контекста в фрагменте
Как проверить доступ к интернету на Android? InetAddress никогда не выдает таймаут
Room - Директория экспорта схемы не указана аннотационному процессору, не удается экспортировать схему