与以前的版本相比,Android L Developer Preview中的Drawable Tinting有什么新功能?

时间:2014-08-25 09:11:05

标签: android android-drawable android-5.0-lollipop tint

我正在开发新的Android L预览版,现在正在处理drawable上的着色概念。

我想知道在Android L开发者预览版中是否有关于可绘制着色的新内容。

我读到了this documentation,其中说:

  

Android L开发者预览版使您可以定义位图或   九个补丁作为alpha蒙版,并使用颜色资源或色调着色   解析为颜色资源的主题属性(例如,   ?android:attr/colorPrimary)。您只能创建一次这些资产   自动着色以匹配您的主题。

但我不明白它与以前的版本有什么不同。我知道如何使用ColorFilterPorterDuffColorFilter在图片上应用色调。任何有关这方面的帮助将不胜感激。

2 个答案:

答案 0 :(得分:21)

从L开始,您可以在XML中指定色调。这些可以引用主题属性(如图所示),颜色状态列表,颜色资源或显式十六进制颜色代码。默认情况下,色调模式为SRC_IN,但可以使用android:tintMode属性将其设置为其他模式。

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/my_icon"
    android:tint="?android:attr/colorControlNormal" />

默认控件全部使用?android:attr / colorControlNormal用于正常状态(例如未选中的复选框)和?android:attr / colorControlActivated(默认情况下映射到?android:attr / colorAccent)的激活状态(例如,选中复选框)。

您可以在自己的应用程序drawable中使用这些属性来继承默认的框架颜色,或者您可以重新定义它们以更改默认或激活的控件颜色。您还可以引用特定于您的应用的属性(如图所示)。

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/my_icon"
    android:tint="?attr/myThemeAttribute" />

答案 1 :(得分:13)

with new Android Support Library 22.1 now more support for tinting possible!

  

Support V4库是大部分内容的基础   Android支持库,包含许多专注于的类   使向后兼容性更容易。

     

DrawableCompat现在将可绘制的着色带回API 4:简单地换行   你的Drawable通过DrawableCompat.wrap(Drawable)和setTint(),   setTintList()和setTintMode()将起作用:无需创建和   保持单独的drawable只支持多种颜色!

Info from Chris Banes blog:

  

可绘制着色棒棒糖中添加的可绘制着色方法是   对于让您动态着色资产非常有用。 AppCompat有   它自己在v21支持库中实现,我们已经   现在将其提取到支持-v4中的DrawableCompat中,供大家使用   使用。重要的是要知道它是如何工作的。

Drawable drawable = ...;

// Wrap the drawable so that future tinting calls work
// on pre-v21 devices. Always use the returned drawable.
drawable = DrawableCompat.wrap(drawable);

// We can now set a tint
DrawableCompat.setTint(drawable, Color.RED);
// ...or a tint list
DrawableCompat.setTintList(drawable, myColorStateList);
// ...and a different tint mode
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER);
  

要记住的是,在你致电DrawableCompat.wrap()之后,你   不能依赖与你给它的结果相同的结果。   相反,您应该使用DrawableCompat.unwrap()来检索   原来的Drawable。

     

在内部,我们现在将您的Drawable包装在一个特殊的'tint drawable'中   将自动更新您的Drawable的滤色器   指定的色调。这允许我们处理ColorStateList实例。

但我想知道如何使用它xml !!有一个名为

的选项
<TintImageView
android:layout_width=""
android:layout_height="" 
android:src=""
android:backgroundTint="@color/green"/>

但如果我想更改EditText TextView的drawable left | right图标,我觉得没有办法做到这一点!