Как изменить цвет кнопки плавающего действия?

fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(PrivateDealActivity.this, R.color.colorWhite)));

Это не работает. Как изменить цвет фона плавающей кнопки действия

Отметьте свой код как код и объясните, что вы ожидаете, а также что происходит на самом деле.

Dragonthoughts 03.07.2018 12:34

Возможный дубликат Android меняет цвет плавающей кнопки действия

Kamlesh 03.07.2018 12:38

Использование xml: app: backgroundTint = "YOUR_COLOR_CODE" Использование программным способом: floatButton.setBackgroundTintList (ColorStateList.valueOf (‌ getResources (). GetCo‌ lor ("YOUR_COLOR_CODE‌")));

Dhara Jani 03.07.2018 12:42

Убедитесь, что вы используете android.support.design.widget.FloatingActionButton

Lokesh Desai 03.07.2018 12:50

floatButton.setBackgroundTintList (ColorStateList.valueOf (‌ getResources (). getCo‌ lor ("YOUR_COLOR_CODE‌"))); // этот код у меня не работает.

Jeeva V 03.07.2018 13:15
9
5
10 185
7

Ответы 7

Простым решением вашей проблемы было бы изменение цвета по умолчанию colorAccent.

Как указано в Разработчики Android - FloatingActionButton:

The background color of this view defaults to the your theme's colorAccent. If you wish to change this at runtime then you can do so via setBackgroundTintList(ColorStateList).

Если невозможно изменить ваш цветовой акцент в соответствии с требованиями вашего проекта, но вам необходимо реализовать это программно, вы можете опубликовать свой код, и я буду более чем счастлив обновить свой ответ.

OP использует setBackgroundTintList, и он не работает ... поэтому этот ответ не помогает

Someone Somewhere 05.04.2019 22:20

Вы можете использовать этот код для изменения цвета фона:

FloatingActionButton button = findViewById(R.id.your_button);
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP && button instanceof AppCompatButton) {
    ((AppCompatButton) button).setSupportBackgroundTintList(ColorStateList.valueOf(*your color in integer*));
} else {
    ViewCompat.setBackgroundTintList(button, ColorStateList.valueOf(*your color in integer*));
}

Пожалуйста, попробуйте это.

app:backgroundTint = "@android:color/darker_gray"

Вы могли бы использовать

app:backgroundTint = "@color/colorAccent"

как показано ниже

<android.support.design.widget.FloatingActionButton
        android:id = "@+id/add_student_house"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        app:backgroundTint = "@color/colorAccent"
        android:src = "@drawable/ic_house_add"/>

просто обратите внимание, что это приложение: backgroundTint, а не android: backgroundTint

Также вы можете сделать это, добавив стиль:

<style name = "AppTheme.FloatingActionButton" >
        <item name = "colorAccent">@color/colorAccent</item>
</style>

И задайте этот стиль как тему в плавающей кнопке действия, как показано ниже:

android:theme = "@style/AppTheme.FloatingActionButton"

<android.support.design.widget.FloatingActionButton
    android:id = "@+id/add_student_house"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:theme = "@style/AppTheme.FloatingActionButton"
    android:src = "@drawable/ic_house_add"/>

Просто используйте этот атрибут:

android:backgroundTint = "@color/yourColor"

Используя материальные компонентыFloatingActionButton и Тема материал по умолчанию, он использует цвет с атрибутом colorSecondary.

Чтобы изменить этот цвет, у вас есть разные варианты:

  • Вы можете использовать атрибут app:backgroundTint в xml:
<com.google.android.material.floatingactionbutton.FloatingActionButton
       ...
       app:backgroundTint = ".." />
  • Вы можете использовать собственный стиль с помощью атрибута <item name = "backgroundTint">
  <!--<item name = "floatingActionButtonStyle">@style/Widget.MaterialComponents.FloatingActionButton</item> -->
  <style name = "MyFloatingActionButton" parent = "@style/Widget.MaterialComponents.FloatingActionButton">
    <item name = "backgroundTint">....</item>
  </style>
  • Начиная с версии 1.1.0 компонентов материала, вы также можете использовать новый атрибут materialThemeOverlay, чтобы переопределить цвет по умолчанию colorSecondary только для компонента:
  <style name = "MyFloatingActionButton" parent = "@style/Widget.MaterialComponents.FloatingActionButton">
    <item name = "materialThemeOverlay">@style/MyFabOverlay</item>
  </style>

  <style name = "MyFabOverlay">
    <item name = "colorSecondary">@color/custom2</item>
  </style>

Ваш код полностью верен. Я также написал аналогичный способ изменения цвета фона плавающей кнопки действия программно. Просто проверьте свой xml-код один раз. Мой XML-код:

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:layout_alignParentEnd = "true"
    android:layout_alignParentBottom = "true"
    app:borderWidth = "0dp"
    android:id = "@+id/fab"
    android:layout_margin = "16dp"
    app:elevation = "8dp"/>

Помните, что здесь важно хранить borderWidth = "0dp". Теперь в коде Java:

fab = view.findViewById(R.id.fab);
fab.setBackgroundTintList(ColorStateList.valueOf(required_color));

Здесь вы можете заменить required_color на Color.parseColor() или ContextCompat.getColor().

Другие вопросы по теме