android主题使用多个colors.xml

时间:2015-05-26 23:02:20

标签: android xml android-layout colors android-theme

我是Android开发的新手,所以请耐心等待。我的应用程序元素(按钮颜色,背景颜色,文本颜色,分隔符颜色等)使用colors.xml中的颜色,例如使用“@ color / mycolor”。

我的colors.xml看起来像:

<?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>

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

2 个答案:

答案 0 :(得分:7)

  1. 假设您已经知道如何动态切换主题。
  2. 您可以拥有多个定义颜色的XML文件。 colors.xml只是一个惯例。所有这些颜色都将被定义并可并行访问......
  3. ...除非您将文件放在不同的资源括号中。例如。 res/values/colors.xml中的默认颜色和res/values-sw600dp/colors.xml中平板电脑的颜色(文件名不重要),这可能不是您想要的。
  4. 假设你有这些主题:

    <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"将解析适合您正在使用的主题的颜色。

    注意:遗憾的是,在Lollipop之前,这些颜色attr引用无法用于XML drawables。

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

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

    可以指定哪些属性?

    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\res\values\themes*.xml和appcompat-v7来源以获取更多属性。

    然后你甚至可以定义你自己的attrs(偏离主题,使用谷歌)。

答案 1 :(得分:0)

你应该看看Styles and Themes。您可以在清单中为自己的应用设置自定义主题。

<application android:theme="@style/CustomTheme">

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