低于 L 的 ImageView 色调无法引用主题属性
ImageView tint below L cannot reference Theme Attribute
我最近在我的应用程序中添加了不同的主题,因此需要为每个主题设置不同颜色的图标。
<ImageView
...
android:src="@drawable/ic_info"
android:tint="?colorControlNormal"
但是在 API 级别低于 21 时这不起作用。
我正在使用 vectordrawables 并且已经尝试使用
vectorDrawables.useSupportLibrary = true
和
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
但这也无济于事。
着色支持文档非常模糊,结合使用 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.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
您隐式使用了 L 以下不支持的 ColorStateList (abc_secondary_text_material_light.xml)。
除非您使用 <android.support.v7.widget.AppCompatImageView>
并且还使用支持库 app:tint
属性中的 tint 属性。
所以适当的tint属性最终解决了。
我最近在我的应用程序中添加了不同的主题,因此需要为每个主题设置不同颜色的图标。
<ImageView
...
android:src="@drawable/ic_info"
android:tint="?colorControlNormal"
但是在 API 级别低于 21 时这不起作用。 我正在使用 vectordrawables 并且已经尝试使用
vectorDrawables.useSupportLibrary = true
和
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
但这也无济于事。
着色支持文档非常模糊,结合使用 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.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
您隐式使用了 L 以下不支持的 ColorStateList (abc_secondary_text_material_light.xml)。
除非您使用 <android.support.v7.widget.AppCompatImageView>
并且还使用支持库 app:tint
属性中的 tint 属性。
所以适当的tint属性最终解决了。