可绘制的api <21

是否有可能为api <21做可绘制的着色工作?

<bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/ic_calendar" android:tint="@color/primary" /> 

工作得很好,但只适用于API21的设备。 任何解决方法,降低api设备或AppCompat的支持? 找不到任何东西。

像这样使用AppCompatImageView

 <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" android:tint="#636363" /> 

确保您的应用程序的build.gradle包含最新的appcompat-v7

例如:在应用程序的build.gradle compile 'com.android.support:appcompat-v7:25.0.0'

你可以使用源代码来实现。 以前的着色不被DrawableCompat支持。 从支持库22.1开始,你可以做到这一点,但是你需要这样做:

 Drawable normalDrawable = getResources().getDrawable(R.drawable.drawable_to_tint); Drawable wrapDrawable = DrawableCompat.wrap(normalDrawable); DrawableCompat.setTint(wrapDrawable, getResources().getColor(R.color.colorPrimaryLight)); 

你不能简单地使用ImageView来显示你的Drawable吗? android:tint在较旧的API级别上工作正常。

 <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_calendar" android:tint="@color/primary" /> 

在此之前,有一个类似的问题: https : //stackoverflow.com/a/26533340/950427

Android可绘制着色仅在Android 5.0及更高版本(API 21+)中受支持。 (它确实表示“ At the moment this is limited to coloring the action bar and some widgets. ”)。

主题化

当您设置这些属性时,AppCompat会自动将其值传播到API 21+上的框架属性。 这会自动为状态栏和“概览(最近)”任务条目着色。

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

小工具着色

在Android 5.0设备上运行时,所有的小部件都使用我们刚才讨论的颜色主题属性进行着色。 在棒棒糖上有两个主要特征:可绘制着色,以及可绘制的引用主题属性(forms为?attr / foo)。

AppCompat在早期版本的Android上为UI部件的子集提供了类似的行为:

一切由AppCompat的工具栏(动作模式等)提供EditText微调CheckBox RadioButton开关(使用新的android.support.v7.widget.SwitchCompat)CheckedTextView你不需要做任何特殊的事情,使这些工作,只需使用这些控制像往常一样,你的布局和AppCompat将做其余的(有一些注意事项,请参阅下面的常见问题)。

资料来源:

http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

https://chris.banes.me/2014/10/17/appcompat-v21/

现在AppCompatImageView,AppCompatButton将取代ImageView,Button来支持API较低的设备上的色调。 查看链接了解更多详情AppCompatImageView , AppCompatButton

对于着色图像,你可以使用imageView.setColorFilter(int color) 。 这从API 8工作,并为我的黑色图像着色我想要的颜色。 这可以取代setImageTintList()但只是使用android:tint也应该工作。