是否可以对api进行可绘制的着色工作? 21?
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_calendar"
android:tint="@color/primary" />
工作正常但仅适用于使用API21的设备。针对较低api设备或AppCompat支持的任何解决方法?找不到任何东西。
答案 0 :(得分:97)
像这样使用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"
/>
确保您的应用appcompat-v7
中有最新的build.gradle
。
示例:compile 'com.android.support:appcompat-v7:25.0.0'
build.gradle
中的body {
padding: 1em;
}
.change-content {
cursor: pointer;
display: block;
width: 100%;
padding: 0.48em 1em;
}
.change-content:after {
content: 'Hello';
}
.change-content:hover:after {
content: 'World';
}
。
答案 1 :(得分:39)
您可以使用源代码实现这一目标。
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));
答案 2 :(得分:22)
你不能简单地用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"
/>
答案 3 :(得分:17)
此前有人问过类似的问题:https://stackoverflow.com/a/26533340/950427
Android Drawable Tinting仅在Android 5.0+(API 21+)中受支持。 (确实说&#34; At the moment this is limited to coloring the action bar and some widgets.
&#34;)。
主题化
...
设置这些属性时,AppCompat会自动传播 它们对API 21 +上的框架属性的值。这个 自动为状态栏和概述(最近)任务条目着色。
在较旧的平台上,AppCompat会在其中模拟颜色主题 可能。目前这只限于着色动作栏和 一些小部件。
和
小工具着色
在使用Android 5.0的设备上运行时,所有的 使用我们刚才谈到的颜色主题属性对小部件进行着色 关于。 Lollipop有两个主要功能: 可绘制着色和引用主题属性(表单的主题) ?attr / foo)in drawables。
AppCompat在早期版本的Android上提供类似的行为 对于UI小部件的子集:
AppCompat工具栏提供的所有内容(动作模式等) EditText Spinner CheckBox RadioButton Switch(使用新的 android.support.v7.widget.SwitchCompat)CheckedTextView你不需要 做一些特殊的事情来使这些工作,只需使用这些控件 像往常一样你的布局和AppCompat将完成其余的工作(有些 注意事项;请参阅下面的常见问题解答。)
来源:
http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html
答案 4 :(得分:13)
现在AppCompatImageView,AppCompatButton将替换ImageView,Button以支持具有较低API的设备上的色调。查看链接了解更多详情 AppCompatImageView,AppCompatButton
答案 5 :(得分:6)
对于着色图像,您可以使用imageView.setColorFilter(int color)
。这适用于API 8,用于将我的黑色图像着色为我想要的颜色。
这可以取代setImageTintList()
,但只使用android:tint
也可以。
答案 6 :(得分:2)
使用此NameSpace
的xmlns:应用= “http://schemas.android.com/apk/res-auto”
之后你可以用app:tint替换每个android:tint。这解决了 我的问题。
答案 7 :(得分:1)
这将随您所愿,并且可以在支持库的所有Android版本上使用:
@JvmStatic
fun getTintedDrawable(inputDrawable: Drawable, @ColorInt color: Int): Drawable {
val wrapDrawable = DrawableCompat.wrap(inputDrawable.mutate())
DrawableCompat.setTint(wrapDrawable, color)
DrawableCompat.setTintMode(wrapDrawable, Mode.SRC_IN)
return wrapDrawable
}
答案 8 :(得分:0)
我来晚了,但是这是怎么做。
val textInput = EditText(context)
val drawable = ContextCompat.getDrawable(context, R.drawable.your_drawable)
drawable?.let {
myDrawable -> DrawableCompat.setTint(myDrawable, ContextCompat.getColor(context, R.color.your_color))
textInput.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, myDrawable, null)
}
答案 9 :(得分:0)
如果有人要创建新的可绘制对象(tin1,tint2 ..),请尝试
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/your_image"
android:tint="@color/tint_color">
</bitmap>