【问题标题】:Use Night resources on Light theme在 Light 主题上使用 Night 资源
【发布时间】:2020-03-07 22:17:57
【问题描述】:

我正在使用材质组件的深色主题样式,一切正常,但现在我需要显示具有不同主题的特定视图以获得更多对比度。 我在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.xmlvalues-night/colors.xml 中的两种不同颜色资源。

我想做的是找到一种方法来在使用深色主题时检索浅色主题颜色(反之亦然),或者将相反的主题应用于单个视图。

我找到的唯一解决方案是在两个colors.xml 文件中为每种颜色简单地定义两个变体(正常和“反转”),但由于定义了许多颜色,我想避免这种情况。

【问题讨论】:

    标签: android android-resources android-theme material-components-android


    【解决方案1】:

    为了避免必须为每种颜色定义多个明暗值变体,我定义了一个自定义样式,该样式引用了相反的主题变体,例如在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>
    

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多