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.
- El formato de paquete xml de Android no reconoce las propiedades de aapt
- VectorDrawableCompat y lona giran, dibujable desaparece en 90/270 grados
- TileMode repetir con vector drawable
- ¿Puedo usar un vector dibujable de la misma manera que usé un parche 9?
- Librería de soporte de Android 23.2 vector drawables are blurry
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
:
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>
- Android vectorDrawables.useSupportLibrary = true está deteniendo la aplicación
- Cómo obtener un mapa de bits de VectorDrawable
- Android Vector Drawable <defs> no es compatible. ¿Como arreglarlo?
- No se puede usar la casilla de verificación en eclipse con el complemento de adt de Android
- Selector de Android Drawable con VectorDrawables srcCompat
- Descripción de las propiedades VectorDrawable de Android
- Herramientas para crear AnimatedVectorDrawable
- ¿Cómo utilizar el vector drawables con vista además de ImageView con srcCompat?
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/>
- La forma más fácil de dar formato a cadena como 1 000 000
- Cambiar el estado del conmutador de Android