【问题标题】:Use colorPrimary in drawable on pre-lollipop with AppCompat在带有 AppCompat 的 pre-lollipop 上的 drawable 中使用 colorPrimary
【发布时间】:2015-07-07 06:06:16
【问题描述】:

我正在使用 AppCompat 22.1.1。

由于某些原因,我的应用可以在用户导航期间动态更改其主题。 (例如,当您从“我的应用程序”部分移动到“电影”部分时,移动到应用程序的另一部分,例如在 google play store 应用程序中)

为了避免为每个主题创建一个可绘制的背景,我尝试创建这样的背景:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="?attr/colorPrimary" /></shape>

当以编程方式更改主题时,我想 colorPrimary 也会发生变化,然后膨胀的按钮将被新主题的颜色着色。

但我在棒棒糖前有一个膨胀异常(但适用于棒棒糖)。 drawable找不到属性attr/colorPrimary,为什么?

这是我正在使用的简单 theme.xml:

 <style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/my_blue</item>
    <item name="colorPrimaryDark">@color/my_blue_dark</item>
    <item name="colorAccent">@color/my_blue_light</item>
</style>

颜色在 values/colors.xml 中,只是六色。所有资源都在“values”目录中,而不是在 values-r21 目录中。

【问题讨论】:

  • 嘿@Sakaroz 你有没有为棒棒糖之前的设备找到任何解决方案?

标签: android drawable android-appcompat


【解决方案1】:

在 res/color/ 中创建 color_primary.xml 颜色资源:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="?attr/colorPrimary"/>
</selector>

然后在你的drawable中引用这个:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
   <solid android:color="@color/color_primary" />
</shape>

【讨论】:

【解决方案2】:

根据我的经验,我不知道,但我很确定您无法通过 XML 做任何事情。大量的框架资源提供了两次,形式为some_drawable_dark.xmlsome_drawable_light.xml;看起来您无法从 drawablecolor 文件夹中引用主题值。

所以你应该:

  • 创建x静态资源,其中x是你要放入的主题数量;
  • 在运行时操作,使用setColorFilter() 等。根据具体情况,这可能会很困难。

【讨论】:

  • 堆栈跟踪:原因:java.lang.UnsupportedOperationException:无法转换为颜色:type=0x2。是的,看来我必须以编程方式处理它,也许是新的 AppCompatWidgets 及其新的 colortint 实用方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 2015-08-14
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
相关资源
最近更新 更多