使用多种colors.xml的android主题

android theme using multiple colors.xml

我是android开发的新手,所以请多多包涵。我的应用程序元素(按钮颜色,背景颜色,文本颜色,分隔线颜色等)使用colors.xml中的颜色,例如使用" @ color / mycolor"。

我的colors.xml看起来像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="mycolor">#202020</color>
    <color name="white">#FFFFFF</color>
    <color name="whitehint">#50FFFFFF</color>
    <color name="primary">#673AB7</color>
    <color name="primary_dark">#512DA8</color>
    <color name="primary_light">#D1C4E9</color>
    <color name="accent">#794cc9</color>
    <color name="primary_text">#212121</color>
    <color name="secondary_text">#a4a4a4</color>
    <color name="icons">#FFFFFF</color>
    <color name="divider">#B6B6B6</color>
</resources>

现在我有了一个菜单,用户可以在其中选择一个我想使用第二个color2.xml的主题,例如,它将具有相同的颜色名称,但是按键的十六进制代码不同。我应该如何查看我的应用程序引用的XML文件?


  • 假设您已经知道如何快速切换主题。
  • 您可以有多个定义颜色的XML文件。 colors.xml只是一个约定。所有这些颜色将被定义并可以并行访问...
  • ...除非您将文件放在其他资源支架中。例如。 res/values/colors.xml中的默认颜色和res/values-sw600dp/colors.xml中的平板电脑的颜色(文件名并不重要),这可能不是您想要的。
  • 假设您有以下主题:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <style name="Theme.My.DarkRed" parent="Theme.AppCompat">
        <item name="colorPrimary">#f00</item>
        <item name="colorPrimaryDark">#c00</item>
        <item name="colorAccent">#c90</item>
    </style>

    <style name="Theme.My.LightBlue" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">#9ff</item>
        <item name="colorPrimaryDark">#6cc</item>
        <item name="colorAccent">#06f</item>
    </style>

    现在当您定义例如android:background="?colorAccent"适用于您正在使用的主题的颜色将得到解决。

    注意:可悲的是,在棒棒糖之前,这些颜色属性引用不能在XML可绘制对象中使用。

    如何从XML外部访问颜色引用?

    1
    2
    3
    4
    TypedArray a = context.obtainStyledAttributes(new int[]{R.attr.colorPrimary, R.attr.colorAccent});
    int colorPrimary = a.getColor(0);
    int colorAccent = a.getColor(1);
    a.recycle();

    可以指定哪些属性?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    android:windowBackground

    android:colorForeground
    android:colorBackground

    android:textColorPrimary
    android:textColorSecondary

    colorPrimary <!-- without prefix in AppCompat, with prefix on pure Lollipop -->
    colorPrimaryDark
    colorPrimaryAccent
    colorControlNormal
    colorControlActivated
    colorControlHighlight
    colorButtonNormal

    android:textColorHint
    android:textColorLink
    android:textColorHighlight

    android:listDivider

    等等,等等...

    您可以查看Android\\sdk\\platforms\\android-*\\data\
    es\\values\\themes*.xml
    和appcompat-v7源以获得更多属性。

    然后,您甚至可以定义自己的attrs(离题,使用Google)。


    您应该查看样式和主题。您可以在清单中为您的应用设置自定义主题。

    1
     

    然后,当用户选择菜单选项来更改主题时,您应该以编程方式更改主题。看看如何动态更改应用程序主题。