按钮文本颜色的单独 day/night 选择器

Separate day/night selector for button text color

我为按钮文本颜色创建了一个自定义选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="?android:attr/textColorPrimary" android:state_enabled="true" />
    <item android:alpha="0.38" android:color="?android:attr/textColorPrimary" />
</selector>

不过,我想在夜间主题中使用 ?android:attr/textColorPrimary 颜色,在白天主题中使用 ?android:attr/colorPrimary。我怎样才能做到这一点?

创建文件夹 drawable-night 并将 night-variant 放入其中,在公共 drawable 文件夹

中保留未修改的文件

每个属性在 day/night 模式设置中都有其互补的浅色和深色。您可以在 theme.xml 中为亮模式和暗模式创建一个新项目并使用它。

res 目录中创建一个 values-night 文件夹并在其中创建一个 themes.xml 这将包含您的夜间主题。 values 文件夹中的 themes.xml 包含您的日主题。

例如说:这是您在 values 文件夹中的 theme.xml

<resources xmlns:tools="http://schemas.android.com/tools">

<style name="Theme.MyApp" parent="Base.Theme.MyApp">

    <item name="buttonColor">@color/light_base_1</item>

</resources>

这是您在 values-night 文件夹中的 theme.xml

    <resources xmlns:tools="http://schemas.android.com/tools">

<style name="Theme.MyApp" parent="Base.Theme.MyApp">

    <item name="buttonColor">@color/dark_base_1</item>

</resources>

attrs.xml 文件中创建一个属性

    <attr name="buttonColor" format="color" />

然后你可以在选择器中使用这个新属性

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?android:attr/textColorPrimary" android:state_enabled="true" />
<item android:alpha="0.38" android:color="?attr/buttonColor" />