6

Изменение цвета кнопки действия (Floating Action Button) в Android

22

Я пытаюсь изменить цвет 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 ответ(ов)

0

Если вы пытаетесь изменить цвет плавающей кнопки действий (FAB) с помощью атрибута в XML, может возникнуть проблема с тем, что рамка кнопки имеет другой цвет. Чтобы исправить это, выполните следующие шаги:

  1. Убедитесь, что в вашем XML-коде кнопка имеет прозрачный цвет фона:
app:backgroundTint="@android:color/transparent"
  1. Затем в коде установите нужный цвет следующим образом:
actionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.white)));

Таким образом, вы сможете правильно изменить цвет FAB и избежать проблем с различием цветов рамки кнопки.

0

Вам следует использовать:

app:backgroundTint="@color/colorPrimary"

Не используйте:

android:backgroundTint="@color/colorPrimary"

Это связано с тем, что атрибут app:backgroundTint позволяет использовать поддержку для фонов в различных версиях Android, в то время как android:backgroundTint может не работать корректно на более старых устройствах. Используя app: префикс, вы сможете избежать проблем с совместимостью.

0

FAB окрашен в соответствии с вашим colorAccent.

<style name="AppTheme" parent="Base.Theme.AppCompat.Light">
    <item name="colorAccent">@color/accent</item>
</style>

В приведенном примере вы определяете цвет акцента для вашей темы приложения. Это именно тот цвет, который будет использоваться для вашей плавающей кнопки действий (FAB). Убедитесь, что у вас правильно прописан ресурс @color/accent в файле colors.xml, чтобы цвет отобразился корректно.

0

Для того чтобы установить цвет фона для вашего 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.

0

Другие решения также могут сработать. Однако, это подход "горилла в 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/.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь