Tutorial de Android Hello, Gallery – “R.styleable no se puede resolver”

Al trabajar en la aplicación tutorial / ejemplo de Hello, Gallery, después de seguir las instrucciones en el sitio, Eclipse informó que R.styleable no se puede resolver.

¿Cuál es la razón de este error y cómo se puede solucionar o solucionar?

Según este hilo , R.styleable se ha eliminado de Android 1.5 y superior.

Hay varias maneras de hacer que la muestra funcione, la más simple que encontré fue recomendada por Justin Anderson en el hilo vinculado al anterior:

  1. Cree un nuevo archivo XML llamado “resources.xml” con el siguiente contenido:

          
  2. Coloque el archivo XML en el directorio res \ values ​​(junto con strings.xml)

  3. Actualice el constructor para su ImageAdapter con lo siguiente (suponiendo que la clase ImageAdapter esté definida en su propio archivo):

     public ImageAdapter(Context c) { mContext = c; TypedArray a = c.obtainStyledAttributes(R.styleable.Gallery1); mGalleryItemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0); a.recycle(); } 

Esta solución básicamente define el atributo de estilo como un recurso de la aplicación en sí y le da la estructura necesaria para trabajar en la aplicación. Tenga en cuenta que la aplicación puede funcionar correctamente si omite las dos líneas de código (antes de a.recycle ();), todo lo que este código hace es establecer un fondo gris alrededor de las imágenes en la Galería.

La razón de este problema es que los recursos que te dicen que pongas en res / values ​​/ attrs.xml son:

       

Pero luego obtienes este adaptador, que Eclipse no puede descifrar y francamente no tiene sentido:

 public ImageAdapter(Context c) { mContext = c; TypedArray a = obtainStyledAttributes(android.R.styleable.Theme); mGalleryItemBackground = a.getResourceId( android.R.styleable.Theme_galleryItemBackground, 0); a.recycle(); } 

Eso es porque no deberías tener “android”. antes de los recursos, el nombre de estilo es Theme aquí pero HelloGallery en el recurso real, y galleryItemBackground coloca a android entre el nombre de estilo y el atributo como este: Theme_android_galleryItemBackground

Por lo tanto, si desea que el método de ImageAdapter funcione con los recursos que le otorgan, debe volver a escribirlo así:

 public ImageAdapter(Context c) { mContext = c; TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery); mGalleryItemBackground = a.getResourceId( R.styleable.HelloGallery_android_galleryItemBackground, 0); a.recycle(); } 

Para problemas futuros con respecto a los recursos (R. * no se puede resolver escriba errores), examine /gen/R.java para saber de qué recursos se están hablando.

Una manera un poco más fácil, y ciertamente más MVCish es usar el sistema de estilo:

Si aún no tiene un tema, cree un styles.xml debajo de res/values . En él, debes tener:

     

Esto definirá un nuevo estilo que llamamos GalleryItem y establece el recurso de fondo de lo que sea que se aplique el estilo, al valor del atributo de estilo android:attr/galleryItemBackground (se pueden ver muchos ejemplos de esto en el frameworks/base/core/res/res/values/themes.xml en la fuente de Android).

Luego, en una statement XML para un ImageView, puede simplemente aplicar su estilo de GalleryItem agregando style="@style/GalleryItem" , por ejemplo:

   

Esto mantendrá sus cosas de estilo fuera del código de su adaptador (¡lo cual es bueno!) Y permitirá que haya más adaptadores generics que no necesiten importar cómo está visualizando sus datos.

Tengo el mismo problema y encontré en el código de muestra de vista personalizada (PieChart) de Google

 import com.example.android.customviews.R; 

cuando comento esa línea de importación, Eclipse notará el error: “R no se puede resolver a una variable”. por lo que debe hacer una importación de su paquete de statement similar anterior. Ex:

 import your.package.name.R; 

corrige errores similares para otros proyectos míos

styleable no es compatible http://developer.android.com/sdk/RELEASENOTES.html

La clase android.R. y sus campos se eliminaron de la API pública, para garantizar mejor la compatibilidad con versiones anteriores para las aplicaciones. Las constantes declaradas en android.R.styleable eran específicas de la plataforma y estaban sujetas a cambios arbitrarios en todas las versiones, por lo que no eran adecuadas para el uso de las aplicaciones. Aún puede acceder a los atributos de estilo de la plataforma desde sus recursos o código. Para hacerlo, declare un elemento de recurso personalizado utilizando un en el archivo res/values/R.attrs su proyecto, luego declare el atributo dentro. Para ver ejemplos, consulte /samples/ApiDemos/res/values/attrs.xml . Para obtener más información acerca de los recursos personalizados, vea Recursos de diseño personalizado. Tenga en cuenta que la documentación de android.R.styleable todavía se proporciona en el SDK, pero solo como una referencia de los atributos de estilo de la plataforma para los diversos elementos.

Hay un pequeño error en la respuesta de selección, en lugar de estilo con estilo

Debería ser así:

    

Intenté todo, pero sin suerte. El R.java generado mostraba la clase de estilo, pero la comstackción mostraba “Estilo no encontrado”. Acabo de agregar el nombre del paquete antes de R, después del cambio, todo está funcionando bien ahora …

Entonces, si el nombre de su paquete es com.example.test, modifique el siguiente código …

 public ImageAdapter(Context c) { mContext = c; TypedArray a = c.obtainStyledAttributes(R.styleable.Gallery1); mGalleryItemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0); a.recycle(); 

}

A

 public ImageAdapter(Context c) { mContext = c; TypedArray a = c.obtainStyledAttributes(com.example.test.R.styleable.Gallery1); mGalleryItemBackground = a.getResourceId(com.example.test.R.styleable.Gallery1_android_galleryItemBackground, 0); a.recycle(); }