Pregunta

En la documentación del SDK de Android, todos los ejemplos utilizados con la sintaxis xml @drawable/my_image abordan directamente las imágenes que están almacenadas 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

¿Puedo 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?

¿Fue útil?

Solución

No, el mecanismo de recursos no admite subcarpetas en el directorio estirable, así que sí -. Que necesita para mantener esa jerarquía plana

La estructura de directorios que mostró resultaría en ninguno de estar disponibles las imágenes.

A partir de mis propios experimentos, parece que el tener una subcarpeta con cualquier artículo en que, dentro de la carpeta res/drawable, hará que el compilador de recursos falle -. Prevenir la R.java archivo que se genere correctamente

Otros consejos

La solución que estoy usando (y el androide sí parece favorecer) es sustituir esencialmente un guión para una barra inclinada, por lo que su estructura sería algo como esto:

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

El enfoque requiere que ser meticuloso en su denominación y no lo hace mucho más fácil pelearse con los archivos propios (si decide que las bebidas y bocadillos deben ser realmente todo "food", que tendría que hacer cambiar el nombre de una masa en lugar de simplemente moverlos a la carpeta); pero la complejidad de su lógica de programación no sufre también mal en comparación con la estructura de carpetas equivalente.

Esta situación de hecho chupa. Android es una mezcla de decisiones maravillosas y terribles de diseño. Sólo podemos esperar para la última parte para conseguir eliminados con la debida premura:)

Sí. - lo hace chupar :) Sin embargo, puede utilizar la carpeta de activos y tienen subdirectorios allí y cargar las imágenes de esa manera

En realidad, en Android Studio es posible. Puede haber anidado recursos como se muestra aquí :

 introducir descripción de la imagen aquí

También hay un plugin para los recursos del grupo aquí .

carpeta Use activos.

código de ejemplo:

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

image = BitmapFactory.decodeStream(is);

He escrito un plugin de Eclipse que permite crear subcarpeta virtual que separa el nombre de archivo con dos subrayados __. El proyecto se encuentra en las primeras etapas, pero no se preocupe que no se bloqueará su IDE

Más detalles se pueden encontrar aquí, se sienten libres a la mesa y enviar solicitudes de extracción:

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

introducir descripción de la imagen aquí

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

Ejecutar con la ruta actual en dibujable-IPAP:

#! /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

En el estudio androide con Gradle puede tener varios directores de código que le permiten separar los recursos. Por ejemplo:

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

Sin embargo, los nombres no deben chocar lo que significa que todavía tendrá que tener nombres tales como sandwiches_tunaOnRye pero usted será capaz de tener una sección separada para todas sus sándwiches.

Esto le permite almacenar sus recursos en diferentes estructuras (útil para auto contenido generado como actionbargenerator)

Una forma de obtener parcialmente alrededor del problema es utilizar el sufijo nivel de API. Yo uso res / layout-v1, res / layout-v2 etc para mantener múltiples sub-proyectos en el mismo apk. Este mecanismo puede ser utilizado para todo tipo de recursos.

Obviamente, esto sólo se puede utilizar si se dirigen a niveles por encima de la API res / layout-v? que está utilizando.

Además, ten cuidado con el error en Android 1.5 y 1.6. Consulte la documentación Andoroid sobre el API de nivel de sufijo .

Con el advenimiento del sistema de bibliotecas, crear una biblioteca por cada gran conjunto de activos que podría ser una solución.

Todavía es problemático, ya que se debe evitar el uso de los mismos nombres dentro de todos los activos, pero el uso de un esquema de prefijo por biblioteca debe ayudar con eso.

No es tan simple como ser capaz de crear carpetas, pero que ayuda a mantener las cosas en su sano juicio ...

Hay una solución para esta situación: se puede crear un resVector (por ejemplo) carpeta en el mismo nivel que por defecto res carpeta. No puede agregar cualquier carpeta drawable-xxx recurso No:

resVector
-drawable
-layout
-color

Después de que todo lo que necesita es añadir

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

en su build.gradle archivo (en el interior android { }).

Esto no es perfeccionar los métodos. Usted tiene que poner en práctica misma manera que es pantalla aquí .

También puede llamar a la imagen en la carpeta a través del código que puede utilizar

Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);

TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);

No es mía, pero me encontré con este tema en la búsqueda de este tema, si el uso de Android Studio y Gradle sistema de construcción es bastante fácil no hay plugins necesarios sólo un poco de edición fichero de construcción

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

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

Es en el apartado "Configuración de la estructura"

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

crear una carpeta en la principal.  así como: 'res_notification_btn'

y crear carpetas en el árbol. Como 'estirable' o 'diseño'

A continuación, en 'build.gradle' agregar este

sourceSets
            {
                main
                {
                    res
                    {
                        srcDirs = ['src/main/res_notification_btn', 'src/main/res']
                      or
                        srcDir 'src/main/res_notification_btn'
                    }
                }
            }
#!/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?("/")
}

Controlar Script de aplanar carpeta de Bash que convierte la jerarquía de carpetas en una sola carpeta

activos /     Se puede utilizar para almacenar archivos de elementos de primas. Los archivos que se guardan aquí se compilan en un archivo .apk tal y como son, y se conserva el nombre de archivo original. Puede navegar por este directorio de la misma manera como un sistema de archivos típico que usa los URI y leer archivos como un flujo de bytes utilizando el AssetManager. Por ejemplo, esta es una buena ubicación para las texturas y los datos del juego. http://developer.android.com/tools/projects/index.html

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

No hay letras mayúsculas y sin barras diagonales.

  1. Haga clic derecho sobre Disponibles
  2. Seleccione Nueva ---> Directorio
  3. Introduzca el nombre del directorio. Por ejemplo: logo.png (la ubicación ya se mostrará la carpeta Disponibles por defecto)
  4. Copiar y pegar las imágenes directamente en la carpeta estirable. Mientras se pega a obtener 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 introduzca el nombre de la imagen. Asegúrese de mantener el mismo nombre que el nombre del directorio es decir logo.png
  5. Haga lo mismo con las imágenes restantes. Todos ellos serán colocados en la carpeta principal logo.png.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top