studio ic_dialog_email example custom create android drawable android-resources

ic_dialog_email - ¿Puede el directorio dibujable de Android contener subdirectorios?



layer list android (20)

En la documentación del SDK de Android, todos los ejemplos utilizados con la sintaxis de @ drawable / my_image xml tratan directamente las imágenes que están almacenadas en el directorio res / drawable en mi proyecto.

Me pregunto si no está bien explícitamente 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.


  1. Haga clic derecho en Drawable
  2. Seleccione Nuevo ---> Directorio
  3. Ingrese el nombre del directorio. Por ejemplo: logo.png (la ubicación ya mostrará la carpeta dibujable de forma predeterminada)
  4. Copia y pega las imágenes directamente en la carpeta dibujable. Mientras pega, obtiene una opción para elegir mdpi / xhdpi / xxhdpi, etc. para cada una de las imágenes de una lista. Seleccione la opción apropiada e ingrese el nombre de la imagen. Asegúrese de mantener el mismo nombre que el nombre del directorio, es decir, logo.png
  5. Haz lo mismo con las imágenes restantes. Todos ellos se colocarán en la carpeta principal logo.png.

Activos / Puede usarlo para almacenar archivos de activos en bruto. Los archivos que guarda aquí se compilan en un archivo .apk tal como está, y el nombre de archivo original se conserva. Puede navegar por este directorio de la misma manera que un sistema de archivos típico que usa URI y leer archivos como una corriente de bytes con AssetManager. Por ejemplo, esta es una buena ubicación para texturas y datos de juegos. http://developer.android.com/tools/projects/index.html


Con la llegada del sistema de bibliotecas, crear una biblioteca por gran conjunto de activos podría ser una solución.

Sigue siendo problemático ya que uno debe evitar usar los mismos nombres en todos los activos, pero usar un esquema de prefijo por biblioteca debería ayudar con eso.

No es tan simple como ser capaz de crear carpetas, pero eso ayuda a mantener las cosas sanas ...


Crea una carpeta en main. como: ''res_notification_btn''

y crea una carpeta de árbol en. como ''dibujable'' o ''diseño''

luego en ''build.gradle'' agrega esto

sourceSets { main { res { srcDirs = [''src/main/res_notification_btn'', ''src/main/res''] or srcDir ''src/main/res_notification_btn'' } } }


En Android Studio con Gradle puede tener varios directores fuente que le permitirán separar los recursos. Por ejemplo:

android { .... android.sourceSets { main.res.srcDirs = [''src/main/extraresdirnamed_sandwiches'', ''src/main/res''] } .... }

Sin embargo, los nombres no deben coincidir, lo que significa que aún tendrá que tener nombres como sandwiches_tunaOnRye, pero podrá tener una sección separada para todos sus bocadillos.

Esto le permite almacenar sus recursos en diferentes estructuras (útil para contenido generado automáticamente, como actionbargenerator)


En realidad, en Android Studio es posible. Puede tener recursos anidados como se muestra here :

También hay un complemento para agrupar recursos here .


Escribí un plugin de eclipse que permite crear una subcarpeta virtual al separar 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 enviar y enviar solicitudes de extracción:

https://github.com/kirill578/Android-Sorted-Res-Folder


Esto no es métodos perfectos. Tienes que implementar la misma forma que se muestra here .

También puede llamar a la imagen debajo de la carpeta a través del código que puede usar

Resources res = getResources(); Drawable shape = res. getDrawable(R.drawable.gradient_box); TextView tv = (TextView)findViewByID(R.id.textview); tv.setBackground(shape);


Gradle con Android Studio podría hacerlo de esta manera ( link ).

Está en el párrafo "Configurando la estructura".

sourceSets { main { java { srcDir ''src/java'' } resources { srcDir ''src/resources'' } } }


Hay una solución para esta situación: puede crear una resVector (por ejemplo) en el mismo nivel que la carpeta de res predeterminada. Allí puede agregar cualquier carpeta de recursos drawable-xxx allí:

resVector -drawable -layout -color

Después de eso todo lo que necesitas es agregar

sourceSets { main.res.srcDirs += ''src/main/resVector'' }

en su archivo build.gradle (dentro de android { } ).


La solución que estoy usando (y la que parece que favorece a Android) es esencialmente sustituir un guión bajo por una barra diagonal, para que su estructura se vea como esta:

sandwich_tunaOnRye.png sandwich_hamAndSwiss.png drink_coldOne.png drink_hotTea.png

El enfoque requiere que sea meticuloso en su denominación y no hace que sea más fácil manipular los archivos (si decide que las bebidas y los sándwiches deberían ser realmente " 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 maravillosas y terribles decisiones de diseño. Solo podemos esperar que la última parte se elimine con toda la prisa debida :)


Los subdirectorios no están permitidos, el recurso debe contener solo [a-z0-9_.].

No tienes letras mayúsculas y no hay barras diagonales.


Me gusta usar un script simple para aplanar una estructura de directorios organizada proporcionada por los diseñadores a algo que se puede usar para generar un archivo R.

Ejecutar con la ruta actual en drawable-hdpi:

#! /bin/bash DIRS=`find * -type d` for dir in ${DIRS} ; do for file in `ls ${dir}` ; do mv ${dir}/${file} ${dir}_${file}; done rmdir ${dir}; done


No es mío, pero encontré este hilo al buscar este problema, si su uso de Android Studio y el sistema Gradle Build es bastante fácil, no se necesitan complementos, solo un poco de edición del archivo de compilación

https://.com/a/22426467/618419


No, el mecanismo de recursos no admite subcarpetas en el directorio que se puede dibujar, así que sí, debe mantener esa jerarquía plana.

El diseño del directorio que mostró no generará ninguna de las imágenes disponibles.

Según mis propios experimentos, parece que tener una subcarpeta con cualquier elemento dentro de la carpeta res/drawable causará fallas en el compilador de recursos, lo que R.java archivo R.java se genere correctamente.


Sí, apesta :) Sin embargo, puede usar la carpeta de activos y tener subdirectorios allí y cargar imágenes de esa manera.


Una forma de solucionar parcialmente el problema es usar el sufijo de nivel de API. Uso res / layout-v1, res / layout-v2, etc. para mantener múltiples subproyectos en la misma aplicación. Este mecanismo se puede utilizar 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 de API .


Utilizar carpeta de activos.

Código de muestra:

InputStream is = null; try { is = this.getResources().getAssets().open("test/sample.png"); } catch (IOException e) { ; } image = BitmapFactory.decodeStream(is);



#!/usr/bin/env ruby # current dir should be drawable-hdpi/ etc # nuke all symlinks Dir.foreach(''.'') {|f| File.delete(f) if File.symlink?(f) } # symlink all resources renaming with underscores Dir.glob("**/*.png") {|f| system "ln -s #{f} #{f.gsub(''/'', ''_'')}" if f.include?("/") }