Android: Utilisation du sélecteur pour définir la couleur d'arrière-plan pour la vue d'image

J'essaie de définir la couleur d'arrière-plan d'une vue d'image.

<ImageView android:id="@+id/my_image" android:src="@drawable/my_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:clickable="true" android:layout_alignParentLeft="true" android:background="@drawable/selector_image_view" /> 

J'utilise le sélecteur suivant.

  <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:background="@color/Violet" /> <item android:state_pressed="true" android:background="@color/red" /> <item android:background="@color/white" /> </selector> 

Mais, il se bloque si j'essaie d'utiliser le sélecteur avec une exception d'exécution. Qu'est-ce que je fais mal?

Mon journal

 E/AndroidRuntime( 4196): FATAL EXCEPTION: main E/AndroidRuntime( 4196): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.X.XCamera/com.X.XCamera.XCameraActivity}: android.view.InflateException: Binary XML file line #13: Error inflating class <unknown> E/AndroidRuntime( 4196): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) E/AndroidRuntime( 4196): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) E/AndroidRuntime( 4196): at android.app.ActivityThread.access$2300(ActivityThread.java:125) E/AndroidRuntime( 4196): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) E/AndroidRuntime( 4196): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime( 4196): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime( 4196): at android.app.ActivityThread.main(ActivityThread.java:4627) E/AndroidRuntime( 4196): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime( 4196): at java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime( 4196): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) E/AndroidRuntime( 4196): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) E/AndroidRuntime( 4196): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime( 4196): Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class <unknown> E/AndroidRuntime( 4196): at android.view.LayoutInflater.createView(LayoutInflater.java:513) E/AndroidRuntime( 4196): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) E/AndroidRuntime( 4196): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) E/AndroidRuntime( 4196): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) E/AndroidRuntime( 4196): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) E/AndroidRuntime( 4196): at android.view.LayoutInflater.inflate(LayoutInflater.java:407) E/AndroidRuntime( 4196): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) E/AndroidRuntime( 4196): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) E/AndroidRuntime( 4196): at com.X.XCamera.Settings.<init>(Settings.java:52) E/AndroidRuntime( 4196): at com.X.XCamera.XCameraActivity.onCreate(XCameraActivity.java:92) E/AndroidRuntime( 4196): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) E/AndroidRuntime( 4196): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) E/AndroidRuntime( 4196): ... 11 more E/AndroidRuntime( 4196): Caused by: java.lang.reflect.InvocationTargetException E/AndroidRuntime( 4196): at android.widget.ImageView.<init>(ImageView.java:108) E/AndroidRuntime( 4196): at java.lang.reflect.Constructor.constructNative(Native Method) E/AndroidRuntime( 4196): at java.lang.reflect.Constructor.newInstance(Constructor.java:446) E/AndroidRuntime( 4196): at android.view.LayoutInflater.createView(LayoutInflater.java:500) E/AndroidRuntime( 4196): ... 22 more E/AndroidRuntime( 4196): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/selector_image_view.xml from drawable resource ID #0x7f02000e E/AndroidRuntime( 4196): at android.content.res.Resources.loadDrawable(Resources.java:1697) E/AndroidRuntime( 4196): at android.content.res.TypedArray.getDrawable(TypedArray.java:601) E/AndroidRuntime( 4196): at android.view.View.<init>(View.java:2045) E/AndroidRuntime( 4196): at android.widget.ImageView.<init>(ImageView.java:112) E/AndroidRuntime( 4196): ... 26 more E/AndroidRuntime( 4196): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #3: <item> tag requires a 'drawable' attribute or child tag defining a drawable E/AndroidRuntime( 4196): at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:167) E/AndroidRuntime( 4196): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787) E/AndroidRuntime( 4196): at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728) E/AndroidRuntime( 4196): at android.content.res.Resources.loadDrawable(Resources.java:1694) E/AndroidRuntime( 4196): ... 29 more W/ActivityManager( 1707): Force finishing activity com.X.XCamera/.XCameraActivity I/IMGSRV ( 1707): gralloc.c:803: gralloc_device_alloc: Allocated a new surface: I/IMGSRV ( 1707): width -> 800 I/IMGSRV ( 1707): height -> 382 I/IMGSRV ( 1707): format -> 1 (HAL_PIXEL_FORMAT_RGBA_8888) 

5 Solutions collect form web for “Android: Utilisation du sélecteur pour définir la couleur d'arrière-plan pour la vue d'image”

Votre Logcat:

E / AndroidRuntime (4196): Causé par: org.xmlpull.v1.XmlPullParserException: ligne de fichier XML binaire n ° 3: la balise requiert un attribut «drawable» ou une balise enfant définissant un dessinable

LogCat indique que votre étiquette <item> devrait inclure android:drawable tag android:drawable .

Le fichier sélecteur devrait ressembler à ceci:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@color/Violet" /> <item android:state_pressed="true" android:drawable="@color/red" /> <item android:drawable="@color/white" /> </selector> 

La manière la plus simple de faire ce que vous voulez est d'ajouter un noeud enfant à l'élément au lieu d'utiliser son attribut drawable :

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true"> <color android:color="@color/Violet" /> </item> <item android:state_pressed="true"> <color android:color="@color/red" /> </item> <item> <color android:color="@color/white" /> </item> </selector> 

Ici, vous pouvez également utiliser des valeurs directes pour la couleur (p. Ex. # FFFF0000 au lieu de "@ couleur / rouge") pour vous épargner de définir de nombreuses ressources de couleurs.

Vous ne pouvez pas utiliser la balise de fond dans le fichier de sélection. Au lieu de cela, vous pouvez l'utiliser comme suit:

1. Créez une couleur.xml dans le dossier "valeurs" sous le dossier "res":

Color.xml:

 <?xml version="1.0" encoding="utf-8"?> <resources> <drawable name="color_one">#110000</drawable> <drawable name="color_two">#001111</drawable> <drawable name="color_three">#001100</drawable> </resources> 

2. Maintenant, utilisez ce fichier dans votre fichier de sélection comme:

  <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@drawable/color_one" /> <item android:state_pressed="true" android:drawable="@drawable/color_two" /> <item android:drawable="@drawable/color_three"/> </selector> 

La meilleure façon d'implémenter le sélecteur est d'utiliser le xml au lieu d'utiliser la manière programmable car il est plus facile à appliquer avec xml.

  <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true"> <color android:color="@color/Violet" /> </item> <item android:state_pressed="true"> <color android:color="@color/red" /> </item> <item> <color android:color="@color/white" /> </item> </selector> 

Pour plus d'informations, j'ai implémenté l'utilisation de ce lien http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html

  <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@color/black_mediam" /> <item android:state_pressed="true" android:drawable="@color/black_mediam" /> <item android:drawable="@color/menu_bg" /> </selector> 

Il fonctionne pour ImageView et Button

  <Button android:layout_weight="1" android:background="@drawable/image_selecter" android:id="@+id/btn_delete_gif" android:textAllCaps="false" android:text="Yes" android:textSize="@dimen/_13sdp" android:textColor="@android:color/white" android:layout_width="175dp" android:layout_height="wrap_content" /> <ImageView android:padding="@dimen/_3sdp" android:background="@drawable/image_selecter" android:layout_weight="1" android:layout_alignParentRight="true" android:id="@+id/delete_gif_giflistview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_delete_gif" android:layout_marginLeft="1dp" /> 
coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.