【问题标题】:How to specify android custom color resources: day/night/high contrast如何指定android自定义颜色资源:日/夜/高对比度
【发布时间】:2019-01-09 05:01:04
【问题描述】:

Android 支持日/夜模式

../values/colors.xml

../values-night/colors.xml

如果我想添加另一个颜色文件夹,比如高对比度的颜色

(../values-highconst/colors.xml),有没有办法添加额外的颜色文件夹,让它根据满足特定条件在额外的文件夹中选择颜色?

我曾考虑使用standard_theme.xml、high_contrast_theme.xml 来实现,当我们尝试为每个主题添加日/夜模式时,多个开发人员共同参与该项目时,管理和维护变得更加困难。我们如何做到这一点?

【问题讨论】:

    标签: android android-resources android-theme android-accessibility android-color


    【解决方案1】:

    你必须像下面这样定义 attrs.xml ..res/values/attrs.xml

    <?xml version="1.0" encoding="utf-8"?>
      <resources>
        <declare-styleable name="tm">
         <attr name="background_color" format="color" />
         <attr name="card_background" format="color" />
         <attr name="text_color" format="color" />
         <attr name="tint_color" format="color" />
         <attr name="button_color" format="color" />
         <attr name="button_text_color" format="color" />
         <attr name="icon_color" format="color" />
         <attr name="toolbar_color" format="color" />
         <attr name="toolbar_content_color" format="color" />
         <attr name="edit_text_background" format="color" />
         <attr name="edit_text_color" format="color" />
         <attr name="edit_text_hint" format="color" />
     </declare-styleable>
    </resources>
    

    然后定义样式 ../res/values/styles 如下所示

     <!-- Base application theme. -->
    <!-- Base light/day theme. -->
    <style name="darkTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="background_color">#fcffe3</item>
        <item name="card_background">#2d2e30</item>
        <item name="text_color">#999797</item>
        <item name="toolbar_color">@color/black</item>
        <item name="toolbar_content_color">@color/yellowText</item>
        <item name="tint_color">@color/colorAccent</item>
        <item name="button_color">@color/colorPrimary</item>
        <item name="model_item_color">@color/colorPrimary</item>
        <item name="icon_color">@color/colorAccent</item>
        <item name="text_icon_dr">@color/black</item>
        <item name="button_text_color">@color/black</item>
        <item name="hint_color">#6e6f70</item>
        <item name="btn_color">@color/yellowButton</item>
        <item name="edit_text_background">@color/white</item>
        <item name="edit_text_color">@color/black</item>
        <item name="edit_text_hint">@color/brown_400</item>
        <item name="text_bg_white">@color/black</item>
    </style>
    
    <!-- Base dark/night theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">#9c2917</item>
        <item name="background_color">@color/colorPrimary</item>
        <item name="card_background">#d3d6d7</item>
        <item name="text_color">@color/white</item>
        <item name="toolbar_color">@color/white</item>
        <item name="toolbar_content_color">@color/yellowText</item>
        <item name="tint_color">#d1d100</item>
        <item name="button_color">@color/colorPrimary</item>
        <item name="model_item_color">@color/colorPrimary</item>
        <item name="icon_color">#331611</item>
        <item name="text_icon_dr">@color/colorAccent</item>
        <item name="button_text_color">@color/black</item>
        <item name="hint_color">#9ef9f9f9</item>
        <item name="edit_text_background">@color/white</item>
        <item name="edit_text_color">@color/black</item>
        <item name="edit_text_hint">@color/brown_400</item>
        <item name="text_bg_white">@color/black</item>
        <item name="btn_color">@color/yellowButton</item>
    </style>
    

    这对我来说适用于多主题 希望对你有用

    【讨论】:

    • 您可以使用下面的模式在没有 attr.xml 的情况下实现您提到的内容。 然后在 values and values-night colors 中指定一个不同的颜色,如下所示: ../values/colors.xml -> #FFFFFF ../values-night/colors.xml -> # 00000 并在您的代码中使用 AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES) 并根据需要更改 MODE。我想要../values-highcontrst/colors.xml。
    猜你喜欢
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多