将ImageView
/ ImageButton
(AppCompatImageView
/ AppCompatImageButton
)与使用android:tint
的样式属性结合使用ColorStateList
}资源在> = API 21上工作正常,但在API<上抛出InflateException
21。
首先,我甚至不知道AppCompatImageView / (Button)
着色是否支持ColourStateList
xml资源作为android:tint
值,我似乎无法找到明确的答案对此。我可以在S / O上找到的建议建议实现TintableImageView
等,但这些答案都过时了,而且从appcompat实现的来源看来,这应该是一个功能。
澄清这绝对是个问题。删除android:tint
属性或将其设置为单个颜色资源可以正常工作。
另外要澄清一点,我知道这可以通过编程方式实现。我试图让它在xml中向后兼容。
<android.support.v7.widget.AppCompatImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_caret_up"
style="@style/IconButton.Primary"
/>
<style name="IconButton.Primary">
<item name="android:tint">@color/link_button_color</item>
</style>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/btnLinkPressedTextColor"
android:state_selected="true" />
<item android:color="@color/btnLinkPressedTextColor"
android:state_pressed="true" />
<item android:color="@color/btnLinkTextColor" />
</selector>
答案 0 :(得分:3)
在我的情况下,我将android:tint
替换为app:tint
并添加到根元素xmlns:app="http://schemas.android.com/apk/res-auto"
。它修复了API级别的崩溃问题&lt; 21。
颜色状态选择器 /res/color/color_selector.xml 如下所示:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#151515"/>
<item android:state_focused="true" android:color="#151515"/>
<item android:color="#424242"/>
</selector>
答案 1 :(得分:2)
看起来AppCompat可绘制着色仅适用于操作栏,而“某些小部件”适用于&lt; API 21,但适用于API 21 +上的所有drawable。
设置这些属性时,AppCompat会自动将其值传播到API 21+上的框架属性。这会自动为状态栏和概述(最近)任务条目着色。
在较旧的平台上,AppCompat尽可能模拟颜色主题。目前仅限于为操作栏和一些小部件着色。
来源:https://android-developers.googleblog.com/2014/10/appcompat-v21-material-design-for-pre.html
这里的答案还有更多细节:https://stackoverflow.com/a/29155611/608312
答案 2 :(得分:0)
项目名称=&#34; android:tint&#34;是错的。
修复&#39; android:tint&#39;到了&#39;
<style name="IconButton.Primary">
<item name="tint">@color/link_button_color</item>
</style>