Enlace de datos con srcCompat
Estoy utilizando el nuevo soporte vectorial dibujable en Support Lib v23.2 con app: srcCompat & tratando de establecer su capacidad de dibujar a través de enlace de datos.
<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <variable name="mediaPojo" type="in.ishaan.pika.data_binding.MediaPojo"/> </data> <RelativeLayout android:background="@color/black" android:layout_width="match_parent" android:layout_height="match_parent"> <VideoView ... /> <ImageView ... app:srcCompat="@{mediaPojo.isPlaying ? @drawable/ic_pause_24dp : @drawable/ic_play_arrow_24dp}" /> <ProgressBar .../> </RelativeLayout> </layout>
Al intentar construir, el estudio lanza:
- Android Support Library 23.2.0 haciendo que la flecha de la barra de herramientas sea negra
- ListView: evita que una vista se recicle
- Android.app Fragments vs. android.support.v4.app usando ViewPager?
- NullPointerException: int android.support.v4.app.FragmentManagerImpl.mCurState Referencia de objeto null
- Adición de bibliotecas de soporte técnico al proyecto de Android
Error: (33, 30) No se puede encontrar el setter para el atributo 'app: srcCompat' con el tipo de parámetro android.graphics.drawable.Drawable.
- Android ViewPager con páginas anteriores y siguientes visibles?
- TabLayout no rellena el ancho cuando tabMode se establece en 'scrollable'
- La expansión CollapsingToolbarLayout no funciona con RecyclerView
- ViewPager.PageTransformer no se puede resolver con un tipo
- Diferencia entre support.v7.widgets y android.widgets Barra de herramientas, Fragment
- ¿Por qué algunas clases no son públicas en la Biblioteca de soporte de Android?
- Visualizador de pdf androide con paginación vertical
- Android SupportMapFragment Exception Error
Simplemente puede utilizar el atributo android: src en lugar de atributo compat cuando se establece recurso vectorial por DataBinding.
La biblioteca DataBinding genera una clase que ejecuta el método setImageResource en tiempo de ejecución.
<ImageView ... android:src="@{@drawable/your_drawable}" />
De acuerdo con http://android-developers.blogspot.com/2016/02/android-support-library-232.html método setImageResource se puede utilizar en tiempo de ejecución en las versiones anteriores del sistema sin ningún cambio adicional.
Si desea utilizar el atributo app: srcCompat . Debe definir la anotación @BindingMethods que conecta el atributo con el setter apropiado de ImageView. Por ejemplo en su Actividad o Fragmento agregar.
@BindingMethods({ @BindingMethod(type = android.widget.ImageView.class, attribute = "app:srcCompat", method = "setImageDrawable") }) public class MainActivity extends AppCompatActivity { // your activity body here }
Puede que tenga que recurrir a utilizar un adaptador de enlace con una firma de método similar a lo siguiente:
@BindingAdapter("app:srcCompat") public static void bindSrcCompat(ImageView imageView, Drawable drawable){ // Your setter code goes here, like setDrawable or similar }
Aquí está la referencia: http://developer.android.com/reference/android/databinding/BindingAdapter.html
Las respuestas propuestas funcionaron principalmente para mí, pero también necesitaba agregar esta línea en mi aplicación:
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
Hacerlo me permite usar elementos extraíbles en versiones anteriores sin tener que preocuparme por las clases o atributos compatibles
- Mal rendimiento con Guava Cache en Android
- SwipeRefreshLayout + WebView cuando la posición de desplazamiento está en la parte superior