更新时间:2023-02-13 14:47:51
我发现了一个解决方案,它似乎工作。首先,你需要在attr.xml定义自定义颜色域
< XML版本=1.0编码=UTF-8&GT?;
<资源>
< attr指示NAME =titleColor格式=引用|色/>
< attr指示NAME =introColor格式=引用|色/>
< /资源>
下面定义你的主题
<样式名称=AppTheme.MyDark父=安卓主题>
<项目名称=titleColor>#FFFFFF< /项目>
<项目名称=introColor>#FFFFFF< /项目>
< /风格>
<样式名称=AppTheme.MyLight父=安卓主题>
<项目名称=titleColor>#000000< /项目>
<项目名称=introColor>#004444< /项目>
< /风格>
终于在布局
<的TextView
机器人:ID =@ + ID / quoteTitle
机器人:titleColor文字颜色=
...
< / TextView的>
<的TextView
机器人:ID =@ + ID / quoteIntro
机器人:introColor文字颜色=
...
< / TextView的>
我找到了解决办法主要是here
似乎有关于使用属性Android官方文档中没有解释。我发现***的资源是这里
I am sure there is a simple answer to that yet I just cant find it so I throw it into *** ... ;-)
I will just put it into an example. I have an android app where the user can choose the theme in the preferences - dark or light theme. Depending on the chosen theme I have to adjust 20 colors in my app. So I have the hope that I can define colours in the theme and then use the names of this so defined colours in the my TextViews etc. Yet so far I cant figure out how to do that and can't find any solution here and there. I really dont want to define an extra dark and light style for each of these 20 colours yet so far that seems the only solution I can find.
Big thanks for any hint
martin:
UPDATE:
In pseudo syntax is that is what I am looking for. Is it possible?
<style name="AppTheme.MyDark" parent="android:Theme">
-?-> titleColor = "#ffffff"
-?-> introColor = "#ffaaaa"
</style>
<style name="AppTheme.MyLight" parent="android:Theme.Light">
-?-> titleColor = "#000000"
-?-> introColor = "#004444"
</style>
<TextView
android:id="@+id/quoteTitle"
android:textColor=@titleColor
...
</TextView>
<TextView
android:id="@+id/quoteIntro"
android:textColor=@introColor
...
</TextView>
I found a solution which seems to work. First you need to define the custom color fields in attr.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="titleColor" format="reference|color" />
<attr name="introColor" format="reference|color" />
</resources>
Next you define your themes
<style name="AppTheme.MyDark" parent="android:Theme">
<item name="titleColor">#FFFFFF</item>
<item name="introColor">#FFFFFF</item>
</style>
<style name="AppTheme.MyLight" parent="android:Theme">
<item name="titleColor">#000000</item>
<item name="introColor">#004444</item>
</style>
and finally in your layout
<TextView
android:id="@+id/quoteTitle"
android:textColor="?titleColor"
...
</TextView>
<TextView
android:id="@+id/quoteIntro"
android:textColor="?introColor"
...
</TextView>
i found the solution mainly here
There seems to be no explanation in the official android documentation about using attributes. Best resource I found is here