¿Puede la carpeta de diseño de Android contener subcarpetas?

9 minutos de lectura

¿Puede la carpeta de diseno de Android contener subcarpetas
paresh mayani

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 hay un caso de proyectos grandes y pesados, debe 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 layout-personal y layout_address 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 de la menú.

  • Igual que: stackoverflow.com/questions/2547100/…

    – Sebastián Roth

    8 de febrero de 2011 a las 7:10

  • Creo que este enlace podría ayudarte en detalle. blog.mindorks.com/…

    – Dilip Poudel

    24 de septiembre de 2017 a las 6:31

¿Puede la carpeta de diseno de Android contener subcarpetas
esquí

PUEDES hacer esto con gradle. he hecho un proyecto de demostración mostrando cómo.

El truco es usar la capacidad de gradle para combinar varias carpetas de recursosy configure la carpeta res y las subcarpetas anidadas en el bloque sourceSets.

La peculiaridad es que no puede declarar una carpeta de recursos de contenedor antes de declarar las carpetas de recursos secundarias de esa carpeta.

A continuación se muestra el bloque sourceSets del archivo build.gradle 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'
        ]
    }
}

imagen de recursos anidados

Además, el padre directo de sus archivos de recursos reales (pngs, diseños xml, etc.) aún debe corresponder con el especificación.

  • ¿Es posible hacer esto con las carpetas dibujables? Lo intenté sin suerte, incluso teniendo en cuenta el orden de declaración.

    – Telkins

    31/03/2014 a las 21:22

  • ¡Agradable! Solo recuerda que en realidad solo estás explotando la capacidad de gradle para unir carpetas de recursos y tendrá sentido.

    – esquiar

    01/04/2014 a las 16:18

  • Los nombres de archivo en la carpeta aún tienen que ser únicos y en el código debe saber que, por ejemplo R.layout.list_item viene del movies o la cinemas carpeta, por lo que aún se aplica la denominación plana.

    – TWiStErRob

    19/10/2014 a las 22:32

  • Desafortunadamente eso no funciona para mí con build:gradle:0.14.4 y buildToolsVersion "21.1.1".

    – Kamil Lelonek

    21 de noviembre de 2014 a las 9:59

  • Esto funciona, sin embargo, la respuesta hace un lamentablemente trabajo inadecuado de explicar que cada subcarpeta que agregue debe tener una segundo subcarpeta dentro de él, que solo puede llamarse “diseño”, y todos sus archivos de diseño deben ir dentro del segundo subcarpeta(s). Leer docenas de comentarios para resolver eso está lejos de ser ideal. Y para cualquiera que todavía esté buscando, configurar las subcarpetas adicionales de “diseño” es la solución al problema URI is not registered problema.

    – aroth

    18 de agosto de 2016 a las 6:45


1646969413 783 ¿Puede la carpeta de diseno de Android contener subcarpetas
100 rabh

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 con respecto a los 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 (o las otras carpetas bajo 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 dentro de raw se consideran recursos y los archivos dentro de activos no lo son.

Tenga en cuenta que debido a que el contenido de la
activos carpeta no se consideran recursos, puede poner una jerarquía arbitraria de carpetas y archivos dentro
eso.

  • Invito a nuestra próxima mejor esperanza sería un complemento de Eclipse o IntelliJ que podría colapsar los archivos en función de los prefijos de nombre de archivo.

    –Jerry Brady

    5 de febrero de 2014 a las 21:24

  • @Justin mira la solución que publiqué para gradle.

    – esquiar

    16 de marzo de 2014 a las 15:26

  • Supongo que una solución podría ser nombrar los archivos como le gustaría que estuvieran categorizados, para que parezca que están en subcarpetas. Agrego una “etiqueta de subcarpeta” al comienzo del nombre. Por ejemplo. todas las actividades serían “actividad_nombre_actividad.xml” y una actividad secundaria podría ser “actividad_nombre_actividad_actividad_niño.xml” y así sucesivamente. Cualquier otro archivo sería “other_filename.xml”. Eso es lo que hago para evitar confusiones. Maldita sea, alguien se me adelantó. Por tres años >.< Mala mía, no había visto eso.

    – Vedavyas Bhat

    19 de abril de 2014 a las 3:10


  • Es importante señalar aquí que al considerar raw como recursos, obtiene bandas dependientes de la densidad/orientación/versión/etc., mientras que con assets tienes que hacerlo manualmente.

    – TWiStErRob

    19/10/2014 a las 22:26

  • Elegí esta respuesta como un argumento en contra de la corriente principal de Android.

    – Zona

    24 de mayo de 2017 a las 3:41

Solo quería agregar 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’, no en la vista ‘android’ desafortunadamente).

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.

  1. Copie todos los archivos XML de su directorio de diseño y colóquelos en un directorio en el escritorio o algo así para hacer una copia de seguridad.
  2. Elimine todo el directorio de diseño (¡¡Asegúrese de haber hecho una copia de seguridad de todo desde el paso 1!)
  3. Haga clic con el botón derecho en el directorio res y seleccione nuevo > directorio.
  4. Nombre este nuevo directorio “diseños”. (Esto puede ser lo que quieras, pero no será un directorio de ‘fragmento’ o un directorio de ‘actividad’, eso viene después).
  5. Haga clic con el botón derecho en el nuevo directorio “diseños” y seleccione nuevo > directorio. (Este será el nombre del tipo de archivos XML que tendrá, por ejemplo, ‘fragmentos’ y ‘actividades’).
  6. Haga clic derecho en el directorio ‘fragmento’ o ‘actividades’ (Nota: esto no tiene que ser ‘fragmento’ o ‘actividades’, eso es lo que estoy usando como ejemplo) y seleccione nuevo> directorio una vez más y asigne un nombre a este directorio “diseño”. (Nota: ¡Esto DEBE llamarse ‘diseño’! Muy importante).
  7. Coloque los archivos XML que desee dentro del nuevo directorio de ‘diseño’ de la copia de seguridad que realizó en su escritorio.
  8. Repita los pasos 5 a 7 para tantos directorios personalizados como desee.
  9. 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'
                    ]
        }
    }
    
  10. Beneficio $$$$

Pero en serio… así es como lo hice funcionar. Avíseme si alguien tiene alguna pregunta. Puedo tratar de ayudar.

Las imágenes valen más que las palabras.

Estructura de directorios

  • ¿Qué pasa con los directorios de diseño como layout-v21?

    – Akshay Chordiya

    7 sep 2015 a las 17:05

  • No lo he probado, pero me imagino que simplemente crea una carpeta layout-v21 junto con las carpetas de diseño.

    – Nick H.

    7 sep 2015 a las 17:07

  • ¡Funciona en gradle 2.0.0 y buildToolsVersion 23.0.2! Tenga en cuenta que el valor de configuración es 'src/main/res/layouts/content' y la ruta de esta configuración es 'src/main/res/layouts/content/layout'

    – cwhsu

    14 de abril de 2016 a las 9:14

  • Tengo un problema con este stackoverflow.com/questions/41934004/…

    – Petra Barús

    30 de enero de 2017 a las 10:49

  • Busqué por un tiempo sin suerte, esta es la única solución que funcionó para mí. ¡Gracias por publicar una respuesta tan detallada con imágenes!

    – Tribu de la máquina

    30 de marzo de 2017 a las 14:54

No es posible, pero la carpeta de diseño está ordenada por nombre. Entonces, antepongo los nombres de los archivos de diseño con los nombres de mis paquetes. Por ejemplo, para los dos paquetes “comprar” y “jugar”:

buying_bought_tracks.xml
buying_buy_tracks.xml
playing_edit_playlist.xml
playing_play_playlist.xml
playing_show_playlists.xml

¿Puede la carpeta de diseno de Android contener subcarpetas
Sharpe

yo suelo Agrupación de archivos de Android complemento para Android Studio. Realmente no le permite crear subcarpetas, pero puede MOSTRAR sus archivos y recursos COMO están en diferentes carpetas. Y esto es exactamente lo que quería.

Puede instalar el complemento “Agrupación de archivos de Android” por

Ventanas:

Android Studio -> Archivo -> Configuración -> Complementos.

Mac:

Android Studio -> Pestaña de Android Studio (arriba a la izquierda) -> Preferencias -> Complementos -> Instalar el complemento de JetBrains..

Para Mac, pude probarlo y no pude buscar el complemento. Así que descargué el complemento de aquí y usó el Install plugin from disk opción de la configuración anterior.

  • ¡También comparte el enlace de ese complemento!

    – Paresh Mayani

    28 de agosto de 2015 a las 7:18

  • Hecho. De todos modos, siempre puede buscar “Agrupación de archivos de Android” en Android Studio -> Archivo -> Configuración -> Complementos

    – Sharpe

    28 de agosto de 2015 a las 10:15

  • el complemento no funcionó en la vista “Android”, solo en la vista “Proyecto”:/

    – Hugo Gresse

    24 de marzo de 2016 a las 10:59

1646969415 62 ¿Puede la carpeta de diseno de Android contener subcarpetas
botbot

Creo que la solución más elegante a este problema (dado que las subcarpetas no están permitidas) es anteponer los nombres de los archivos con el nombre de la carpeta en la que lo habría colocado. Por ejemplo, si tiene un montón de diseños para una Actividad, Fragmento o simplemente una vista general llamados “lugares”, entonces debe anteponerlos con places_my_layout_name. Al menos esto resuelve el problema de organizarlos de manera que sean más fáciles de encontrar dentro del IDE. No es la solución más increíble, pero es mejor que nada.

  • ¡También comparte el enlace de ese plugin!

    – Paresh Mayani

    28 de agosto de 2015 a las 7:18

  • Hecho. De todos modos, siempre puede buscar “Agrupación de archivos de Android” en Android Studio -> Archivo -> Configuración -> Complementos

    – Sharpe

    28 de agosto de 2015 a las 10:15

  • el complemento no funcionó en la vista “Android”, solo en la vista “Proyecto”:/

    – Hugo Gresse

    24 de marzo de 2016 a las 10:59

Ahora, con Android Studio y Gradle, puede tener varias carpetas de recursos en su proyecto. Permitiendo organizar no solo sus archivos de diseño, sino también cualquier tipo de recursos.

No es exactamente una subcarpeta, pero puede separar partes de su aplicación.

La configuración es así:

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

Comprobar el documentación.

  • Me di cuenta de que cada vez que hacía cambios en un diseño con esta configuración, siempre tenía que hacer una clean para verlo reflejado en la aplicación.

    – Pawan Kumar

    18 de junio de 2015 a las 8:50


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad