Я работаю над созданием темной / светлой темы для своего приложения. Я хочу использовать произвольную форму для всех кнопок в приложении. Но при переключении между темами атрибут colorAccent не меняется на цвет фона кнопки.

В светлом режиме colorAccent имеет значение Orange и отображается оранжевым.

enter image description here

Но в темном режиме colorAccent - Фиолетовый , но по-прежнему показывает Оранжевый

enter image description here

Я знаю, что замена работает, потому что я могу изменить другие цвета, и они будут приняты. Это просто форма кнопки.

Я уверен, что это как-то связано с <solid android:color="@color/colorAccent" /> в шейп-файле.

Может ли кто-нибудь увидеть, что я делаю неправильно?

Легкая тема

<resources>
   <!--Top level DayNight theme to be used in AndroidManifest.xml-->
    <style name="MyCustomTheme" parent="Base.MyCustomTheme"/>

    <style name="MyCustomTheme.System.Defaults" parent="Theme.AppCompat.DayNight.DarkActionBar">
        <item name="android:fontFamily">@font/driver_font_family</item>
    </style>


    <style name="Base.MyCustomTheme" parent="MyCustomTheme.System.Defaults">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowBackground">@color/OffWhite</item>

        <!--Component styles-->
        <item name="buttonStyle">@style/MyCustomTheme.Button</item>
    </style>

</resources>

Ночная тема

<resources>
    <style name="MyCustomTheme" parent="Base.MyCustomTheme">
        <item name="colorPrimary">@color/Green</item>
        <item name="colorPrimaryDark">@color/Red</item>
        <item name="colorAccent">@color/Purple</item>
        <item name="android:windowBackground">@color/BlackDark</item>
    </style>
</resources>

rounded_corners.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners  android:radius="10dp" />
    <padding  android:padding="0dp"/>
    <solid android:color="@color/colorAccent" />
</shape>

< Сильный > colors.xml

<resources>
    <!--Leaving these here since they are refrenced by the system and other components-->
    <color name="colorPrimary">@color/NavyBlue</color>
    <color name="colorPrimaryDark">@color/NavyBlueDark</color>
    <color name="colorAccent">@color/Orange</color>

    <color name="Red">#E84E3C</color>
    <color name="Purple">#745EC4</color>
    <color name="Green">#2FCC70</color>
    <color name="NavyBlue">#34495E</color>
    <color name="NavyBlueDark">#2B3D4F</color>
    <color name="BlueDark">#394D82</color>    
    <color name="OffWhite">#EDF1F2</color>
    <color name="BlackDark">#262626</color>
</resources>
0
user-44651 18 Июн 2020 в 19:02

1 ответ

Лучший ответ

Проблема здесь:

<solid android:color="@color/colorAccent" />

Таким образом вы связываете цвет , определенный в colors.xml (который равен @color/Orange). Вместо этого вы должны связать атрибут , определенный в теме приложения:

Изменить на:

<solid android:color="?attr/colorAccent" />
1
Gabriele Mariotti 18 Июн 2020 в 16:11