Android 低于L的ImageView色调无法引用主题属性

Android 低于L的ImageView色调无法引用主题属性,android,android-layout,android-theme,android-vectordrawable,Android,Android Layout,Android Theme,Android Vectordrawable,我最近在我的应用程序中添加了不同的主题,因此需要为每个主题设置不同颜色的图标 <ImageView ... android:src="@drawable/ic_info" android:tint="?colorControlNormal" 及 但这也没用 着色支持文档非常模糊,结合使用VectorDrawables和引用主题颜色,我找不到任何信息 当前正在尝试使用: <android.support.v7.widget.AppCom

我最近在我的应用程序中添加了不同的主题,因此需要为每个主题设置不同颜色的图标

<ImageView
        ...
        android:src="@drawable/ic_info"
        android:tint="?colorControlNormal"

但这也没用

着色支持文档非常模糊,结合使用VectorDrawables和引用主题颜色,我找不到任何信息

当前正在尝试使用:

<android.support.v7.widget.AppCompatImageView
    ...
    android:tint="?colorControlNormal"
    android:src="@drawable/icon"/>

其结果是:

Caused by: android.view.InflateException: Binary XML file line #39: Error inflating class android.support.v7.widget.AppCompatImageView
   at android.view.LayoutInflater.createView(LayoutInflater.java:621)
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:756)
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:759)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
...
Caused by: java.lang.reflect.InvocationTargetException
   at java.lang.reflect.Constructor.constructNative(Native Method)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
...
Caused by: java.lang.NumberFormatException: Invalid int: "res/color/abc_secondary_text_material_light.xml"
   at java.lang.Integer.invalidInt(Integer.java:137)
   at java.lang.Integer.parse(Integer.java:374)
   at java.lang.Integer.parseInt(Integer.java:365)
   at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:122)
   at android.content.res.TypedArray.getInt(TypedArray.java:255)
   at android.widget.ImageView.<init>(ImageView.java:155)
   at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:72)
   at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:68)
原因:android.view.InflateException:二进制XML文件行#39:对类android.support.v7.widget.AppCompatImageView进行膨胀时出错
位于android.view.LayoutInflater.createView(LayoutInflater.java:621)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:756)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:759)
在android.view.LayoutInflater.inflate(LayoutInflater.java:492)
在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
...
原因:java.lang.reflect.InvocationTargetException
位于java.lang.reflect.Constructor.constructNative(本机方法)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:423)
...
原因:java.lang.NumberFormatException:无效int:“res/color/abc\u secondary\u text\u material\u light.xml”
位于java.lang.Integer.InvalidIt(Integer.java:137)
位于java.lang.Integer.parse(Integer.java:374)
在java.lang.Integer.parseInt(Integer.java:365)处
位于com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:122)
位于android.content.res.TypedArray.getInt(TypedArray.java:255)
在android.widget.ImageView上(ImageView.java:155)
位于android.support.v7.widget.AppCompatImageView。(AppCompatImageView.java:72)
位于android.support.v7.widget.AppCompatImageView。(AppCompatImageView.java:68)
尝试使用:

<android.support.v7.widget.AppCompatImageView
    android:id="@+id/my_appcompat_imageview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/my_image" // change to ur own.
    android:tint="#636363" // also change this part to our own case
/>


这项针对API<19

的工作终于找到了问题所在

通过引用主题颜色
?colorControlNormal

您隐式地使用了一个ColorStateList(abc_secondary_text_material_light.xml),它在L下面不受支持。 除非您使用的是
,并且还使用了支持库
app:tint
属性中的tint属性。
因此,正确的色调属性最终解决了这个问题。

我认为ImageView会自动被AppCompatImageView取代。问题是,我需要为色调引用一个主题属性/颜色,当使用原始问题中提供的解决方案添加的示例时,这仍然会导致崩溃
Caused by: android.view.InflateException: Binary XML file line #39: Error inflating class android.support.v7.widget.AppCompatImageView
   at android.view.LayoutInflater.createView(LayoutInflater.java:621)
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:756)
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:759)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
...
Caused by: java.lang.reflect.InvocationTargetException
   at java.lang.reflect.Constructor.constructNative(Native Method)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
...
Caused by: java.lang.NumberFormatException: Invalid int: "res/color/abc_secondary_text_material_light.xml"
   at java.lang.Integer.invalidInt(Integer.java:137)
   at java.lang.Integer.parse(Integer.java:374)
   at java.lang.Integer.parseInt(Integer.java:365)
   at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:122)
   at android.content.res.TypedArray.getInt(TypedArray.java:255)
   at android.widget.ImageView.<init>(ImageView.java:155)
   at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:72)
   at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:68)
<android.support.v7.widget.AppCompatImageView
    android:id="@+id/my_appcompat_imageview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/my_image" // change to ur own.
    android:tint="#636363" // also change this part to our own case
/>