Android VectorDrawable como dibujos compuestos

Según lo indicado por esta publicación de blog desarrollador android , ahora podemos utilizar VectorDrawables en la API de Android 7+ mediante AppCompat 23.2.0 y versiones posteriores.

Todo parece funcionar bien para mí, excepto cuando se trata de utilizar drawables como un compuesto de un TextView.

Normalmente, uno haría algo como:

  customTab.setCompoundDrawablesWithIntrinsicBounds( 0, R.drawable.my_vector, 0, 0 ); 

Desafortunadamente esto no está funcionando en este momento, y no pude encontrar una solución para este problema.

Según el post, los únicos métodos disponibles y de trabajo son el xml uno, usando la app:srcCompat="@drawable/..." y el Java setImageResource(...)

¿Cómo puedo utilizar el nuevo soporte vectorial con el método setCompoundDrawable() ?

Gracias por adelantado.

Editar:

como se solicita, aquí está el resultado de la clase VectorDrawableCompat :

explorar pestaña

el xml es:

 <?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="98" android:viewportHeight="102"> <path android:fillColor="#4D4D4D" android:strokeWidth="2" android:strokeColor="#4D4D4D" android:pathData="M63.3336386,72.2631001 C56.7778507,76.9021242 48.7563953,79.6307404 40.09319,79.6307404 C17.9503315,79.6307404 0,61.804793 0,39.8153702 C0,17.8259473 17.9503315,0 40.09319,0 C62.2360484,0 80.1863799,17.8259473 80.1863799,39.8153702 C80.1863799,50.8100816 75.6987973,60.7639242 68.4433567,67.9690887 L96.7320074,96.0617174 C98.0293966,97.3501165 97.9978616,99.4159703 96.6953405,100.709466 C95.3837385,102.011979 93.2974318,102.019264 92.0151615,100.745879 L63.3336386,72.2631001 L63.3336386,72.2631001 L63.3336386,72.2631001 Z M40.09319,74.9465792 C59.6310061,74.9465792 75.4695341,59.217802 75.4695341,39.8153702 C75.4695341,20.4129383 59.6310061,4.6841612 40.09319,4.6841612 C20.5553738,4.6841612 4.71684588,20.4129383 4.71684588,39.8153702 C4.71684588,59.217802 20.5553738,74.9465792 40.09319,74.9465792 L40.09319,74.9465792 L40.09319,74.9465792 Z" /> </vector> 

A partir de la biblioteca de soporte 23.2 puede utilizar la siguiente solución:

 Drawable drawable=AppCompatDrawableManager.get().getDrawable(mContext, R.drawable.drawable); view.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null); 

Siguiendo las preciosas sugerencias dadas por @pskink pude cargar correctamente un drawable dentro de mi vista.

Mi problema era el selector que estaba utilizando como mi xml para dar la "información actual de la pestaña activa" en mi TabLayout .

He resuelto mi problema haciendo un reparto:

 Drawable drawable; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { drawable = ContextCompat.getDrawable(mContext, tabIcons[i]); } else { drawable = getResources().getDrawable(tabIcons[i]); } StateListDrawable stateListDrawable = (StateListDrawable) drawable; customTab.setCompoundDrawablesWithIntrinsicBounds( null, stateListDrawable, null, null ); 

Usted puede resolverlo mediante la vinculación de datos también:

crear el método del adaptador

 public class Bindings { @BindingAdapter({"bind:drawableStartId"}) public static void setDrawableStart(TextView textView, @DrawableRes int id) { Drawable drawable = AppCompatDrawableManager.get().getDrawable(textView.getContext(), id); Drawable drawables[] = textView.getCompoundDrawablesRelative(); textView.setCompoundDrawablesRelativeWithIntrinsicBounds(drawable, drawables[1], drawables[2], drawables[3]); } } 

y use app:drawableStartId en su archivo xml.

 <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <import type="your.path.to.R" /> </data> <TextView app:drawableStartId="@{isSelected ? R.drawable.one :R.drawable.another}" /> <layout/> 
  • Android: obtener recursos $ NotFoundException para abc_ic_ab_back_material
  • ¿Cómo obtienes un objeto Drawable a través de un TypedArray cuando el recurso drawable es un Vector Drawable?
  • ¿Es posible usar VectorDrawable en Botones y TextViews usando android: DrawableRight?
  • Vector dibujable no dibujado correctamente en Android Studio
  • Youtube Play / pausa Animated Vector Drawable en android
  • Google Play: necesitas comprobar el icono dentro de tu APK porque no es válido
  • Control preciso sobre las animaciones de Androids VectorDrawable
  • La función Auto Mirroring for RTL no funciona en las versiones de Android inferiores a 6.0
  • ¿Por qué mi SVG no se carga en Vector Asset Studio
  • Biblioteca de soporte VectorDrawable Resources $ NotFoundException
  • VectorDrawable no se representa correctamente en API 23
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.