在 Light 主题上使用 Night 资源
Use Night resources on Light theme
我正在使用 Material Component 的深色主题样式,一切正常,但现在我需要显示具有不同主题的特定视图以获得更多对比度。
我在 values/themes.xml
中定义了我的主题:
<style name="Base.AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="colorPrimary">@color/color_primary</item>
<item name="colorPrimaryVariant">@color/color_primary_variant</item>
<item name="colorOnPrimary">@color/color_on_primary</item>
...
</style>
以及 values/colors.xml
和 values-night/colors.xml
中的两种不同颜色资源。
我想做的是找到一种方法来在使用深色主题时检索浅色主题颜色(反之亦然),或者将相反的主题应用于单个视图。
我找到的唯一解决方案是简单地为两个 colors.xml
文件中的每种颜色定义两个变体(正常和 "reversed"),但是由于定义了很多颜色,我想避免这种情况.
为了避免必须为每种颜色定义多个 light/dark 值变体,我定义了一个自定义样式,它引用相反的主题变体,例如在 values/styles.xml
我定义了:
<style name="ThemeOverlay.AppTheme.Reverse" parent="ThemeOverlay.MaterialComponents.Dark"/>
在values-night/styles.xml
中:
<style name="ThemeOverlay.AppTheme.Reverse" parent="ThemeOverlay.MaterialComponents.Light"/>
然后在我想使用“反转”主题的布局根目录中:
<LinearLayout android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppTheme.Reverse">
...
</LinearLayout>
我正在使用 Material Component 的深色主题样式,一切正常,但现在我需要显示具有不同主题的特定视图以获得更多对比度。
我在 values/themes.xml
中定义了我的主题:
<style name="Base.AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="colorPrimary">@color/color_primary</item>
<item name="colorPrimaryVariant">@color/color_primary_variant</item>
<item name="colorOnPrimary">@color/color_on_primary</item>
...
</style>
以及 values/colors.xml
和 values-night/colors.xml
中的两种不同颜色资源。
我想做的是找到一种方法来在使用深色主题时检索浅色主题颜色(反之亦然),或者将相反的主题应用于单个视图。
我找到的唯一解决方案是简单地为两个 colors.xml
文件中的每种颜色定义两个变体(正常和 "reversed"),但是由于定义了很多颜色,我想避免这种情况.
为了避免必须为每种颜色定义多个 light/dark 值变体,我定义了一个自定义样式,它引用相反的主题变体,例如在 values/styles.xml
我定义了:
<style name="ThemeOverlay.AppTheme.Reverse" parent="ThemeOverlay.MaterialComponents.Dark"/>
在values-night/styles.xml
中:
<style name="ThemeOverlay.AppTheme.Reverse" parent="ThemeOverlay.MaterialComponents.Light"/>
然后在我想使用“反转”主题的布局根目录中:
<LinearLayout android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppTheme.Reverse">
...
</LinearLayout>