Когда цвет FAB зависит от colorAccent? - PullRequest
2 голосов
/ 03 февраля 2020

Согласно do c, цвет представления по умолчанию соответствует нашей теме colorAccent. Я попытался изменить colorAccent в моем файле ресурсов стилей, но ничего не произошло:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="colorAccent">#d81b60</item>
</style>

Поэтому я попытался изменить colorSecondary вместо:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="colorSecondary">#d81b60</item>
</style>

И это сработало. Итак, мой вопрос: действительно ли это зависит от colorAccent? Если да, то когда?

Ответы [ 3 ]

3 голосов
/ 03 февраля 2020

Начиная с версии 1.1.0 библиотеки компонентов материалов, стиль по умолчанию FloatingActionButton основан на ?attr/colorSecondary:

  <style name="Widget.MaterialComponents.FloatingActionButton" parent="Widget.Design.FloatingActionButton">
    <item name="backgroundTint">?attr/colorSecondary</item>
  </style>

Начиная с версии 1.2.0 библиотеки компонентов материалов, стиль по умолчанию FloatingActionButton:

    <style name="Widget.MaterialComponents.FloatingActionButton" parent="Widget.Design.FloatingActionButton">
        <item name="backgroundTint">@color/mtrl_fab_bg_color_selector</item>
        <!-- .... -->
    </style>

Начиная с версия 1.2.0 @color/mtrl_fab_bg_color_selector основана на ?attr/colorSecondary:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="?attr/colorSecondary" android:state_enabled="true"/>
  <item android:alpha="0.12" android:color="?attr/colorOnSurface"/>
</selector>

В версии 1.0.0 backgroundTint был основан на ?attr/colorAccent:

  <style name="Widget.Design.FloatingActionButton" parent="android:Widget">
    <item name="backgroundTint">?attr/colorAccent</item>
    ...
  </style>
0 голосов
/ 03 февраля 2020

Я думаю, здесь вы можете прочитать больше:

Атрибут компонента | Значение атрибута темы по умолчанию - backgroundTint | colorSecondary - оттенок | colorOnSecondary - rippleColor | colorOnSecondary

или Вы можете напрямую изменить его в XML с помощью app:backgroundTint:

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/floating_action_button"
    style="@style/Widget.Design.FloatingActionButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|right"
    android:layout_margin="16dp"
    app:backgroundTint="@color/colorAccent"
    app:srcCompat="@drawable/ic_plus_24"/>
0 голосов
/ 03 февраля 2020

Нет, вы не можете, потому что цвет акцента определен в теме, а темы доступны только для чтения в Android.

Единственное, что вы можете сделать, - это переключать темы или устанавливать цвет каждой Компонент вручную.

Примечание: вы можете применить тему к части пользовательского интерфейса вместо всей деятельности, чтобы локально изменить цвет акцента (или другие вещи). Для этого вы можете использовать атрибут android: theme в вашем макете XML с библиотекой AppCompat, или вы можете надуть макет, предоставив ContextThemeWrapper в качестве контекста для вашего LayoutInflater.

ИЛИ

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>

<style name="AppTheme.NewTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorOne</item>
    <item name="colorPrimaryDark">@color/colorOneDark</item>
</style>

и внутри темы набора заданий

 setTheme(R.style.AppTheme_NewTheme);
 setContentView(R.layout.activity_main);
...