带有颜色史学主义色调值的误差夸大图像视图 / imageButton



使用 ImageView/ ImageButton( AppCompatImageView/ AppCompatImageButton(与android:tint的样式属性结合使用ColorStateList资源在> = api 21上可以正常工作,但是在API上抛出InflateException<21。

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

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

也要澄清,我知道这是可以通过编程实现的。我正在尝试将其向后兼容。

最小示例

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>

在我的情况下,我用app:tint替换android:tint,并添加到root Element 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>

看起来像AppCompat可绘制的色彩仅适用于动作栏和"一些小部件"在&lt;API 21,但适用于API 21 。

上的所有可绘制物

设置这些属性时,AppCompat会自动将其值传播到API 21 上的框架属性。这会自动为状态栏和概述(recents(任务条目。

在较旧的平台上,AppCompat在可能的情况下模拟了颜色主题。目前,这仅限于为动作栏和一些小部件着色。

来源:https://android-developers.googleblog.com/2014/10/appcompat-v21-material-design-design-for-pre.html

这里的答案也有更多详细信息:https://stackoverflow.com/a/29155611/608312

item name =" android:tint"是错误的。

修复" android:tint"到'tint'

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

最新更新