una - Tinte de ImageView no funciona en Android 5.0. Ideas para hacer que funcione de nuevo?
poner imagen en layout android (2)
En una aplicación que he creado, noté que las ImageViews no se tiñen en los dispositivos que ejecutan el nuevo Android Lollipop. Este es el código que solía funcionar correctamente en versiones anteriores del sistema operativo:
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="bottom|right"
android:contentDescription="@string/descr_background_image"
android:src="@drawable/circle_shape_white_color"
android:tint="@color/intent_circle_green_grey" />
y este es el dibujable que se carga en ImageView:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
<gradient android:startColor="@color/white" android:endColor="@color/white"
android:angle="270"/>
</shape>
Una vez más, esto está funcionando correctamente en los dispositivos que ejecutan JellyBean / Kitkat, pero el tinte no tiene ningún efecto en los dispositivos que ejecutan Lollipop. ¿Alguna idea para solucionarlo? ¿Es un error en el SO, o debería comenzar a teñir la imagen de manera diferente?
Según el comentario de @alanv, aquí va la solución hacky a este error. La idea básica es extender ImageView
y aplicar ColorFilter
justo después del inflado:
public class TintImageView extends ImageView {
public TintImageView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
private void initView() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ColorStateList imageTintList = getImageTintList();
if (imageTintList == null) {
return;
}
setColorFilter(imageTintList.getDefaultColor(), PorterDuff.Mode.SRC_IN);
}
}
}
Como se puede adivinar, este ejemplo es algo limitado (el conjunto Drawable
después de que el matiz de inflación no se actualice, solo se usa el color predeterminado de ColorStateList
, y tal vez algo más), pero si tiene la idea, puede ajustarlo a su uso. caso.
Use AppCompatImageView
como 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"
/>
Asegúrese de tener la última compile ''com.android.support:appcompat-v7:23.4.0''
en build.gradle
su aplicación.