使用ColorStateList色调值使ImageView / ImageButton膨胀时出错

时间:2017-05-05 09:08:18

标签: android imageview android-appcompat android-4.4-kitkat tint

ImageView / ImageButtonAppCompatImageView / AppCompatImageButton)与使用android:tint的样式属性结合使用ColorStateList }资源在> = API 21上工作正常,但在API<上抛出InflateException 21。

首先,我甚至不知道AppCompatImageView / (Button)着色是否支持ColourStateList xml资源作为android:tint值,我似乎无法找到明确的答案对此。我可以在S / O上找到的建议建议实现TintableImageView等,但这些答案都过时了,而且从appcompat实现的来源看来,这应该是一个功能。

澄清这绝对是个问题。删除android:tint属性或将其设置为单个颜色资源可以正常工作。

另外要澄清一点,我知道这可以通过编程方式实现。我试图让它在xml中向后兼容。

最小的例子

activity_foo.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"

/>

styles.xml

<style name="IconButton.Primary">
    <item name="android:tint">@color/link_button_color</item>
</style>

link_button_color.xml

<?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>

3 个答案:

答案 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>