Conflicto Android drawable de la identificación del recurso?

He configurado el proyecto / android de ZXing 1.7 como una biblioteca referenciada por mi proyecto principal de la aplicación android. Como una prueba rápida / prueba de concepto, he utilizado la CaptureActivity, de la misma manera que se describe aquí: http://damianflannery.wordpress.com/2011/06/13/integrate-zxing-barcod …

Sobre todo, las cosas funcionan bien, puedo iniciar CaptureActivity y recibir los datos escaneados en mi actividad que lo lanzó. Sin embargo, obtengo un comportamiento muy extraño, que creo que puede estar relacionado con los ID de recursos que están en conflicto entre mi proyecto y el proyecto / android ZXing. Esto tomará algunos que explican así que por favor tengan paciencia conmigo …

Inicie la CaptureActivity con este código:

Button scanBtn = (Button)findViewById(R.id.mainmenu_btn_scan); scanBtn.setOnClickListener( new View.OnClickListener() { public void onClick(View v) { Intent i = new Intent("com.google.zxing.client.android.SCAN"); i.putExtra("SCAN_MODE", "QR_CODE_MODE"); startActivityForResult(i, SCAN_CODE); } }); 

mainmenu_btn_scan se define en menu.xml:

 <LinearLayout android:id="@+id/mainmenu_view" style="@style/MainMenu" xmlns:android="http://schemas.android.com/apk/res/android"> ... <Button android:id="@+id/mainmenu_btn_scan" android:drawableTop="@drawable/btn_scan_drawable" style="@style/MainMenuButton" android:text="Scan"/> ... </LinearLayout> 

Btn_scan_drawable.xml está en / drawable, y es un selector drawable:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/scan_btn_pressed" android:state_focused="true" android:state_pressed="true" /> ... </selector> 

El problema estúpido es el siguiente: cuando mantengo el teléfono en una orientación lanscape y lanzo CaptureActivity, veo la imagen scan_btn_pressed extendida en la pantalla y otra copia de ella también se extendía a través de la "Colocar un código de barras dentro del texto del rectángulo del visor .. . ". Esto sólo ocurre cuando inicio la actividad mientras sostiene el teléfono en orientación horizontal .

Descubrí que si reemplazo

 android:drawableTop="@drawable/btn_scan_drawable" 

con

 android:drawableTop="@drawable/scan_btn_pressed" 

El problema desaparece y todo funciona perfectamente, pero quiero hacerlo funcionar con el selector (y entender por qué ocurre el problema). ¿Cómo puede un dibujable de la interfaz de usuario de mi actividad misteriosamente aparecer en otra actividad? Soy nuevo en el desarrollo de Android, pero he estado googleando y trabajando en este tema durante todo el día y no puedo encontrar el motivo por el que esto sucedería aparte de algunas referencias vagas a los conflictos de ID de recursos en los documentos de Android.

Nota: Estoy utilizando CaptureActivity como un prototipo / prueba de concepto rápido. Implementaré mi propia actividad aprovechando la librería ZXIng para la aplicación final.

2 Solutions collect form web for “Conflicto Android drawable de la identificación del recurso?”

Ok, parece que la plataforma Android tiene algunas arrugas cuando se utilizan proyectos de biblioteca. Me di cuenta de que la clase R de mi proyecto y la clase R del proyecto de la biblioteca ZXIng estaban en conflicto en todo el lugar, por ejemplo

 public static final class id { ... public static final int mainmenu_btn_scan=0x7f070028; ... 

Y en la clase R del proyecto de la biblioteca:

 public static final class id { ... public static final int share_app_button=0x7f070028; ... 

Esto explica cómo un elemento de la interfaz de usuario de mi actividad estaba siendo recogido por una actividad en el proyecto de biblioteca. Android dará prioridad a los recursos ids en el proyecto principal.

Este excelente artículo dio la solución: http://blog.blackmoonit.com/2010/12/android-sharing-resources-in-eclipse.html

En CaptureActivity (la actividad que estaba llamando en la biblioteca), lo reemplazé

 viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view); 

Con este

 viewfinderView = (ViewfinderView) findViewById( getResources().getIdentifier("viewfinder_view", "id", getPackageName()) ); 

Esto solucionó el problema, aunque tendré que pasar y reemplazar todas las referencias directas de id con getIndentifier () para asegurar que no haya otros conflictos. No es una solución ideal. Parece que debería haber alguna extensión bastante sencilla de la herramienta aapt para asegurar que los ids entre clases R no estén en conflicto.

Vea aquí para más información: http://devmaze.wordpress.com/2011/05/22/android-application-android-libraries-and-jar-libraries/

project->clean.. to regenerate R Class

  • Incorporación de ZXing en la aplicación de Android
  • Actualizar sdk tiene NoClassDefFoundError para zxing
  • ¿Cómo integrar ZXing Library a Android Studio para escanear códigos de barras?
  • Opciones de Zxing barcode camera
  • Java.util.zip.ZipException: entrada duplicada
  • Llamar escáner de código de barras en un clic de botón en la aplicación android
  • Agregue el proyecto android de ZXing como biblioteca en android studio
  • Lanzamiento de un fragmento después de ZXing 2.0 QR-Code Scan
  • Cómo activar la exploración de modo masivo en zxing
  • Orientación de Android zxing: ResultMetaData es null, Get Rotation / Orientation
  • Cámara Zxing en modo vertical en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.