En la documentación del SDK de Android, todos los ejemplos utilizados con la sintaxis @ drawable / my_image xml abordan directamente las imágenes que se almacenan en el directorio res / drawable de mi proyecto.
Me pregunto si explícitamente no está bien crear un subdirectorio dentro del directorio dibujable.
Por ejemplo, si tuviera el siguiente diseño de directorio:
res/drawable
-- sandwiches
-- tunaOnRye.png
-- hamAndSwiss.png
-- drinks
-- coldOne.png
-- hotTea.png
¿Podría hacer referencia a la imagen de un sándwich de ensalada de atún como @ drawable / sandwiches / tunaOnRye
¿O tengo que mantener la jerarquía plana en el directorio dibujable?
android
drawable
android-resources
Pimienta Lebeck-Jobe
fuente
fuente
Respuestas:
No, el mecanismo de recursos no admite subcarpetas en el directorio dibujable, por lo que sí, debe mantener esa jerarquía plana.
El diseño del directorio que mostró no resultaría en ninguna de las imágenes disponibles.
Según mis propios experimentos, parece que tener una subcarpeta con cualquier elemento dentro de la
res/drawable
carpeta hará que el compilador de recursos falle, evitando que elR.java
archivo se genere correctamente.fuente
La solución alternativa que estoy usando (y la que Android parece favorecer) es esencialmente sustituir un guión bajo por una barra diagonal, para que su estructura se vea así:
El enfoque requiere que sea meticuloso al nombrar y no hace que sea mucho más fácil manipular los archivos ellos mismos (si decidiera que las bebidas y los sándwiches realmente deberían ser "
food
", tendría que hacer un cambio de nombre masivo en lugar de simplemente moviéndolos al directorio); pero la complejidad de su lógica de programación no sufre demasiado en comparación con la estructura de carpetas equivalente.Esta situación apesta de hecho. Android es una mezcla de decisiones de diseño maravillosas y terribles. Solo podemos esperar que la última porción sea eliminada con toda prisa :)
fuente
En realidad, en Android Studio es posible. Puede tener recursos anidados como se muestra aquí :
También hay un complemento para agrupar recursos aquí .
fuente
Sí, apesta :) Sin embargo, puede usar la carpeta de activos y tener subdirectorios allí y cargar imágenes de esa manera.
fuente
Use la carpeta de activos.
Código de muestra:
fuente
Escribí un complemento de eclipse que permite crear una subcarpeta virtual separando el nombre del archivo con dos guiones bajos
__
. El proyecto se encuentra en las primeras etapas, pero no se preocupe, no bloqueará su IDE.Puede encontrar más detalles aquí, no dude en bifurcar y enviar solicitudes de extracción:
https://github.com/kirill578/Android-Sorted-Res-Folder
fuente
Me gusta usar una secuencia de comandos simple para aplanar una estructura de directorio organizada proporcionada por los diseñadores a algo que pueda usarse para generar un archivo R.
Ejecutar con la ruta actual en drawable-hdpi:
fuente
En Android Studio con Gradle, puede tener múltiples directores de origen que le permitirán separar los recursos. Por ejemplo:
Sin embargo, los nombres no deben colisionar, lo que significa que aún necesitará tener nombres como sandwiches_tunaOnRye, pero podrá tener una sección separada para todos sus sándwiches.
Esto le permite almacenar sus recursos en diferentes estructuras (útil para contenido generado automáticamente como actionbargenerator)
fuente
Una forma de solucionar parcialmente el problema es utilizar el sufijo de nivel API. Yo uso res / layout-v1, res / layout-v2, etc. para mantener múltiples subproyectos en el mismo apk. Este mecanismo se puede usar para todos los tipos de recursos.
Obviamente, esto solo se puede usar si está apuntando a niveles de API por encima de res / layout-v? Tu estas usando.
Además, ten cuidado con el error en Android 1.5 y 1.6. Consulte la documentación de Andoroid sobre el sufijo de nivel API .
fuente
Con la llegada del sistema de bibliotecas, la creación de una biblioteca por gran conjunto de activos podría ser una solución.
Todavía es problemático ya que uno debe evitar usar los mismos nombres dentro de todos los activos, pero usar un esquema de prefijo por biblioteca debería ayudar con eso.
No es tan simple como poder crear carpetas, pero eso ayuda a mantener la cordura ...
fuente
Hay una solución para esta situación: puede crear una
resVector
carpeta (por ejemplo) en el mismo nivel que lares
carpeta predeterminada . Allí puede agregar cualquierdrawable-xxx
carpeta de recursos allí:Después de eso, todo lo que necesitas es agregar
en su
build.gradle
archivo (dentroandroid { }
).fuente
Este no es un método perfecto. Debe implementar la misma forma que se muestra aquí .
También puede llamar a la imagen debajo de la carpeta a través del código que puede usar
fuente
No es mío, pero encontré este hilo al buscar este problema, si estás usando Android Studio y el sistema Gradle Build, es bastante fácil, no se necesitan complementos, solo una pequeña edición del archivo de compilación
https://stackoverflow.com/a/22426467/618419
fuente
Gradle con Android Studio podría hacerlo de esta manera ( enlace ).
Está en el párrafo "Configuración de la estructura"
fuente
crear una carpeta en main como: 'res_notification_btn'
y crea una carpeta de árbol en.
luego en 'build.gradle' agregue esto
fuente
fuente
Verifique el script Bash Flatten Folder que convierte la jerarquía de carpetas en una sola carpeta
fuente
activos / Puede usarlo para almacenar archivos de activos sin procesar. Los archivos que guarde aquí se compilan en un archivo .apk tal cual y se conserva el nombre de archivo original. Puede navegar por este directorio de la misma manera que un sistema de archivos típico usando URI y leer archivos como una secuencia de bytes usando el AssetManager. Por ejemplo, esta es una buena ubicación para texturas y datos de juegos. http://developer.android.com/tools/projects/index.html
fuente
Los subdirectorios no están permitidos, el recurso debe contener solo [a-z0-9_.].
No, tienes letras mayúsculas y no hay barras diagonales.
fuente
fuente