Jas*_* T. 37 android tint drawable
我正在使用新的TextInputLayout来包装EditText.当我确定某个字段有错误时,我会执行以下操作:
Drawable drawable = DrawableCompat.wrap(getEditText().getBackground());
DrawableCompat.setTintList(drawable, ColorStateList.valueOf(Color.RED));
Run Code Online (Sandbox Code Playgroud)
这适用于5.0并将下划线变为红色,但在4.4或4.1测试设备上不执行任何操作.我在这里错过了什么?看起来如此简单,根据谷歌"正常工作"...非常确定我也有最新版本:
编译'com.android.support:design:22.2.0'
FWIW,如果我使用setColorFilter而不是setTint,那么它可以在所有平台上运行,但是我有问题就会消失,一旦焦点设置/左/等等就不会回来......我更愿意这样做色调(如果有人在寻找额外的信用lol,我真的更喜欢将色调应用于焦点和非焦点状态)
谢谢!
Xav*_*ler 66
当你打电话时wrap(),原件Drawable被内部包装成一个新的DrawableWrapper,用于在旧设备上实现着色.因此,为了使其工作,您必须将返回的设置设置Drawable为EditText:
final Drawable originalDrawable = editText.getBackground();
final Drawable wrappedDrawable = DrawableCompat.wrap(originalDrawable);
DrawableCompat.setTintList(wrappedDrawable, ColorStateList.valueOf(Color.RED));
editText.setBackground(wrappedDrawable);
Run Code Online (Sandbox Code Playgroud)
从支持库的23.2.0版开始,您也可以使用setTint()而不是setTintList()仅设置一种色调而不必创建ColorStateList.
DrawableCompat.setTint(wrappedDrawable, Color.RED);
Run Code Online (Sandbox Code Playgroud)
如果你想确保超出API级别16的向后兼容性,你会遇到一些麻烦.setBackground()在API级别16中添加,您需要setBackgroundDrawable()在此之前调用设备.最好实现一个帮助你的辅助方法:
public static void setBackground(View view, Drawable background) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
view.setBackground(background);
} else {
view.setBackgroundDrawable(background);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14751 次 |
| 最近记录: |