我正面临一个问题,我尝试了几种方法来面对它,但仍未成功。
我的应用程序正在使用多个主题,如:万圣节,圣诞节等,我正在使用TabLayout背景,文本颜色等小部件上的一些颜色属性来对应用程序进行上下文化。
问题是:如何根据主题背景使用具有不同值的相同颜色属性?
所以,基本上这是声明颜色的常规方法:
<color name="mapMarkerSelectedTextColor">@android:color/white</color>
<color name="mapLoadingIndicatorColor">@color/white</color>
但是,主题和颜色是不可变的所以我想,也许我可以在每个主题中覆盖这些颜色,如:
<item name="mapMarkerUnselectedTextColor">@color/christmas_red</item>
<item name="mapMarkerSelectedTextColor">@color/white</item>
=&GT;不成功
其他线索,将这些颜色声明为属性:
<attr name="mapLoadingIndicatorColor" format="reference|color" />
<attr name="map_autocomplete_accent_color" format="reference|color" />
在我的XML中使用主题:“?attr/mapLoadingIndicatorColor
”。
但是这个功能只有在 Lollipop 版本之后才会被允许并导致崩溃。
我已经阅读了很多关于主题定制,颜色覆盖的内容,但从未找到关于这种情况的明确解决方案。
非常感谢。
答案 0 :(得分:1)
你提到过:
并在我的XML中使用主题:&#34;?attr / mapLoadingIndicatorColor&#34;。 但是这个功能只允许自Lollipop版本和原因 之前崩溃。
我不确定在Lollipop之前不能使用?attr/something
(Lollipop的API等级为21),因为我在模拟器中使用API级别为16的设备上使用它并且工作正常。当我选择不同的主题时,我会像下面一样使用它来改变按钮的背景颜色:
在activity_main.xml中(在布局文件夹中):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A button"
style="?attr/myButton"/>
</LinearLayout>
在attrs.xml中(在values文件夹中):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="myButton" format="reference"></attr>
</resources>
在styles.xml中(在values文件夹中):
<resources>
<!-- default theme -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="myButton">@style/defaultButtonStyle</item>
</style>
<style name="defaultButtonStyle" parent="android:Widget.Button">
<item name="android:background">@color/green</item>
</style>
<!-- custom theme -->
<style name="AppTheme.CustomTheme">
<item name="myButton">@style/customButtonStyle</item>
</style>
<style name="customButtonStyle" parent="android:Widget.Button">
<item name="android:background">@color/blue</item>
</style>
</resources>
实际上,我对Android编程还是一个新手,如果你能指明你在哪里找到?attr/mapLoadingIndicatorColor
会导致Lollipop崩溃的声明,那就太棒了! (我无法在任何地方找到它,我只知道你不能使用提升属性前Lollipop)