¿Puede la carpeta de diseño de Android contener subcarpetas?
En este momento, estoy almacenando cada archivo de diseño XML dentro de la carpeta 'res/layout', por lo que es factible y simple administrar proyectos pequeños, pero cuando se trata de proyectos grandes y pesados, entonces debería haber una jerarquía y subcarpetas necesarias dentro de la carpeta de diseño.
por ejemplo
layout
-- layout_personal
-- personal_detail.xml
-- personal_other.xml
--layout_address
-- address1.xml
-- address2.xml
De la misma manera, nos gustaría tener subcarpetas para la aplicación grande, entonces, ¿hay alguna forma de hacerlo dentro del proyecto de Android?
Puedo crear subcarpetas diseño-personal y diseño_dirección dentro de la carpeta de diseño, pero cuando llega el momento de acceder al archivo de diseño XML usando R.layout._______, en ese momento no hay ninguna ventana emergente de diseño XML dentro del menú.
PUEDES hacer esto con gradle
. Hice un proyecto de demostración que muestra cómo.
El truco consiste en utilizar la capacidad de Gradle para fusionar varias carpetas de recursos y configurar la carpeta res y las subcarpetas anidadas en el sourceSets
bloque.
La peculiaridad es que no se puede declarar una carpeta de recursos contenedora antes de declarar las carpetas de recursos secundarias de esa carpeta.
A continuación se muestra el sourceSets
bloque del build.gradle
archivo de la demostración. Observe que las subcarpetas se declaran primero.
sourceSets {
main {
res.srcDirs = [
'src/main/res/layouts/layouts_category2',
'src/main/res/layouts',
'src/main/res'
]
}
}
Además, el padre directo de sus archivos de recursos reales (pngs, diseños xml, etc.) aún debe corresponder con la especificación .
La respuesta es no.
Me gustaría llamar su atención sobre este libro Pro Android 2 que dice:
También vale la pena señalar algunas limitaciones en materia de recursos. Primero, Android solo admite una lista lineal de archivos dentro de las carpetas predefinidas en res. Por ejemplo, no admite carpetas anidadas en la carpeta de diseño (u otras carpetas en res).
En segundo lugar, existen algunas similitudes entre la carpeta de activos y la carpeta sin formato en res. Ambas carpetas pueden contener archivos sin formato, pero los archivos sin formato se consideran recursos y los archivos dentro de activos no.
Tenga en cuenta que debido a que el contenido de la carpeta de activos no se considera recursos, puede colocar una jerarquía arbitraria de carpetas y archivos dentro de ella.
Solo quería agregar algo a la fantástica respuesta de Eskis para las personas que tienen problemas. (Nota: esto solo funcionará y se verá como directorios separados dentro de la vista 'proyecto', desafortunadamente no en la vista 'android').
Probado con lo siguiente. BuildToolsVersion = 23.0.0 gradle 1.2.3 y 1.3.0
Así es como conseguí que el mío funcionara con un proyecto ya construido.
- Copie todos los archivos XML de su directorio de diseño y colóquelos en un directorio en el escritorio o algo así como respaldo.
- Elimine todo el directorio de diseño (¡¡¡Asegúrese de haber hecho una copia de seguridad de todo desde el paso 1!!!)
- Haga clic derecho en el directorio res y seleccione nuevo > directorio.
- Llame a este nuevo directorio "diseños". (Esto puede ser lo que quieras, pero no será un directorio de 'fragmentos' o un directorio de 'actividades', eso viene más adelante).
- Haga clic derecho en el nuevo directorio "diseños" y seleccione nuevo > directorio. (Este será el nombre del tipo de archivos XML que tendrás en él, por ejemplo, 'fragmentos' y 'actividades').
- Haga clic derecho en el directorio 'fragmento' o 'actividades' (Nota: esto no tiene que ser 'fragmento' o 'actividades', eso es solo lo que estoy usando como ejemplo) y seleccione nuevo > directorio una vez más y asigne un nombre a este directorio. "disposición". (Nota: ¡Esto DEBE llamarse 'diseño'! Muy importante).
- Coloque los archivos XML que desee dentro del nuevo directorio 'diseño' de la copia de seguridad que realizó en su escritorio.
- Repita los pasos 5 a 7 para tantos directorios personalizados como desee.
Una vez que esto esté completo, vaya al archivo gradle.build de sus módulos y cree una definición de sourceSets como esta... (¡Asegúrese de que 'src/main/res/layouts' y 'src/main/res' sean siempre los dos últimos! !! Como muestro a continuación).
sourceSets { main { res.srcDirs = [ 'src/main/res/layouts/activities', 'src/main/res/layouts/fragments', 'src/main/res/layouts/content', 'src/main/res/layouts', 'src/main/res' ] } }
Ganancia $$$$
Pero en serio... así es como lo hice funcionar. Avíseme si alguien tiene alguna pregunta. Puedo intentar ayudar.
Las imágenes valen más que las palabras.