android主题使用多个colors.xml

Pra*_*y C 1 xml android colors android-layout 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>
Run Code Online (Sandbox Code Playgroud)

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

Eug*_*nec 8

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

假设你有这些主题:

<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>
Run Code Online (Sandbox Code Playgroud)

现在,当您定义例如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();
Run Code Online (Sandbox Code Playgroud)

可以指定哪些属性?

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
Run Code Online (Sandbox Code Playgroud)

等等,等等......

您可以查看Android\sdk\platforms\android-*\data\res\values\themes*.xml和appcompat-v7源代码以获取更多属性.

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