Kann der Android-Layoutordner Unterordner enthalten?
Lesezeit: 9 Minuten
Gemeinde Mayani
Im Moment speichere ich jede XML-Layoutdatei im Ordner „res/layout“, sodass es machbar und einfach ist, kleine Projekte zu verwalten, aber wenn es sich um große und umfangreiche Projekte handelt, sollte es eine Hierarchie geben und Unterordner, die im Layoutordner benötigt werden.
Auf die gleiche Weise möchten wir Unterordner für die große Anwendung haben. Gibt es also eine Möglichkeit, dies innerhalb des Android-Projekts zu tun?
Ich kann Layout-Personal- und Layout_Address-Unterordner im Layout-Ordner erstellen, aber wenn es an der Zeit ist, mit R.layout._______ auf die XML-Layout-Datei zuzugreifen, gibt es zu diesem Zeitpunkt kein XML-Layout-Popup in der Speisekarte.
Sie können dies mit Gradle tun. Ich habe eine gemacht Demo-Projekt zeigen wie.
Der Trick besteht darin, die Fähigkeit von Gradle zu nutzen mehrere Ressourcenordner zusammenführenund legen Sie den Ordner res sowie die verschachtelten Unterordner im Block sourceSets fest.
Die Besonderheit besteht darin, dass Sie einen Container-Ressourcenordner nicht deklarieren können, bevor Sie die untergeordneten Ressourcenordner dieses Ordners deklarieren.
Unten ist der sourceSets-Block aus der build.gradle-Datei aus der Demo. Beachten Sie, dass die Unterordner zuerst deklariert werden.
Außerdem muss das direkte übergeordnete Element Ihrer tatsächlichen Ressourcendateien (PNGs, XML-Layouts usw.) immer noch mit dem übereinstimmen Spezifikation.
Ist dies mit den ausziehbaren Ordnern möglich? Ich habe es gerade vergeblich versucht, selbst unter Berücksichtigung der Deklarationsreihenfolge.
– Telkins
31. März 2014 um 21:22 Uhr
Hübsch! Denken Sie nur daran, dass Sie wirklich nur die Fähigkeit von Gradle ausnutzen verschmelzen Ressourcenordner und es wird Sinn machen.
– eski
1. April 2014 um 16:18 Uhr
Die Dateinamen im Ordner müssen weiterhin eindeutig sein und im Code muss man wissen, dass zB R.layout.list_item kommt aus der movies oder der cinemas Ordner, so dass die flache Benennung immer noch gilt.
– TWiStErRob
19. Oktober 2014 um 22:32 Uhr
Leider funktioniert das bei mir nicht mit build:gradle:0.14.4 und buildToolsVersion "21.1.1".
– Kamil Lelonek
21. November 2014 um 9:59 Uhr
Das funktioniert, aber die Antwort tut a erbärmlich unangemessene Aufgabe zu erklären, dass jeder Unterordner, den Sie hinzufügen, eine haben muss Sekunde Unterordner darin, der nur “Layout” heißen kann, und alle Ihre Layout-Dateien müssen in den Ordner ” Sekunde Unterordner(n). Sich Dutzende von Kommentaren durchzulesen, um das herauszufinden, ist alles andere als ideal. Und für alle, die noch suchen, ist das Einrichten der zusätzlichen “Layout” -Unterordner die Lösung für das Problem URI is not registered Problem.
– aroth
18. August 2016 um 6:45 Uhr
100rabh
Die Antwort ist nein.
Ich möchte Ihre Aufmerksamkeit auf dieses Buch lenken Pro Android 2 das besagt:
Es ist auch erwähnenswert, einige Einschränkungen in Bezug auf die Ressourcen zu beachten. Erstens unterstützt Android nur eine lineare Liste von Dateien innerhalb der vordefinierten Ordner unter res. Zum Beispiel es unterstützt keine verschachtelten Ordner unter dem Layoutordner (oder die anderen Ordner unter res).
Zweitens gibt es einige Ähnlichkeiten zwischen dem Assets-Ordner und dem Raw-Ordner unter res. Beide Ordner können RAW-Dateien enthalten, aber die Dateien in RAW werden als Ressourcen betrachtet und die Dateien in Assets nicht.
Beachten Sie, dass der Inhalt der Vermögenswerte Ordner werden nicht als Ressourcen betrachtet, Sie können einen setzen willkürliche Hierarchie von Ordnern und Dateien darin
es.
Ich schätze, unsere nächstbeste Hoffnung wäre ein Eclipse- oder IntelliJ-Plugin, das die Dateien basierend auf Dateinamenpräfixen reduzieren könnte.
– Jerry Brady
5. Februar 2014 um 21:24 Uhr
@Justin schau dir die Lösung an, die ich für Gradle gepostet habe.
– eski
16. März 2014 um 15:26 Uhr
Ich denke, eine Lösung könnte darin bestehen, die Dateien so zu benennen, wie Sie sie kategorisieren möchten, sodass es so aussieht, als wären sie in Unterordnern. Ich füge am Anfang des Namens ein “Unterordner-Tag” hinzu. Zum Beispiel. alle Aktivitäten wären „activity_activityname.xml“ und eine untergeordnete Aktivität könnte „activity_activityname_childactivity.xml“ sein und so weiter. Jede andere Datei wäre “other_filename.xml”. Das mache ich, um Verwirrung zu vermeiden. Verdammt, jemand ist mir zuvorgekommen. Um drei Jahre >.< Meine Güte, das hatte ich noch nicht gesehen.
– Vedavyas Bhat
19. April 2014 um 3:10 Uhr
Es ist wichtig, hier zu beachten, dass durch Überlegung raw als ressourcen bekommst du dichte/orientierung/version/etc abhängiges striping, während mit assets das musst du manuell machen.
– TWiStErRob
19. Oktober 2014 um 22:26 Uhr
Wählte diese Antwort als Argument gegen den Kampf gegen den Android-Mainstream.
– Zon
24. Mai 2017 um 3:41 Uhr
Ich wollte nur die fantastische Antwort von eskis für Leute mit Problemen ergänzen. (Hinweis: Dies funktioniert nur und sieht wie separate Verzeichnisse in der „Projekt“-Ansicht aus, leider nicht in der „Android“-Ansicht.)
Getestet mit folgendem. BuildToolsVersion = 23.0.0 Gradle 1.2.3 & 1.3.0
So habe ich meins dazu gebracht, mit einem bereits gebauten Projekt zu arbeiten.
Kopieren Sie alle XML-Dateien aus Ihrem Layout-Verzeichnis und legen Sie sie in ein Verzeichnis auf dem Desktop oder etwas zur Sicherung.
Löschen Sie das gesamte Layout-Verzeichnis (Stellen Sie sicher, dass Sie alles von Schritt 1 gesichert haben !!!)
Klicken Sie mit der rechten Maustaste auf das res-Verzeichnis und wählen Sie neu > Verzeichnis.
Benennen Sie dieses neue Verzeichnis “Layouts”. (Dies kann alles sein, was Sie wollen, aber es wird kein ‘Fragment’-Verzeichnis oder ‘Aktivitäts’-Verzeichnis sein, das später kommt).
Klicken Sie mit der rechten Maustaste auf das neue Verzeichnis „Layouts“ und wählen Sie „Neu“ > „Verzeichnis“. (Dies ist der Name des XML-Dateityps, den Sie darin haben werden, z. B. „Fragmente“ und „Aktivitäten“).
Klicken Sie mit der rechten Maustaste auf das Verzeichnis „Fragment“ oder „Aktivitäten“ (Hinweis: Dies muss nicht „Fragment“ oder „Aktivitäten“ sein, das verwende ich nur als Beispiel) und wählen Sie erneut „Neu“ > „Verzeichnis“ und benennen Sie dieses Verzeichnis “Layout”. (Hinweis: Dieses MUSS ‘Layout’ heißen!!! sehr wichtig).
Legen Sie die gewünschten XML-Dateien in das neue „Layout“-Verzeichnis aus der Sicherung, die Sie auf Ihrem Desktop erstellt haben.
Wiederholen Sie die Schritte 5 bis 7 für beliebig viele benutzerdefinierte Verzeichnisse.
Sobald dies abgeschlossen ist, gehen Sie in die gradle.build-Datei Ihres Moduls und erstellen Sie eine sourceSets-Definition wie diese … (Stellen Sie sicher, dass ‘src/main/res/layouts’ und ‘src/main/res’ immer die unteren beiden sind !! !! Wie ich unten zeige).
Aber im Ernst … so habe ich es zum Laufen gebracht. Lassen Sie mich wissen, wenn jemand Fragen hat. Ich kann versuchen zu helfen.
Bilder sind mehr wert als Worte.
Was ist mit Layout-Verzeichnissen wie z layout-v21?
– Akshay Chordiya
7. September 2015 um 17:05 Uhr
Ich habe es nicht getestet, aber ich würde mir vorstellen, dass Sie neben den Layout-Ordnern einfach einen Layout-v21-Ordner erstellen.
– Nik H
7. September 2015 um 17:07 Uhr
Funktioniert auf Gradle 2.0.0 und buildToolsVersion 23.0.2! Beachten Sie, dass der Konfigurationswert ist 'src/main/res/layouts/content' und der Pfad dieser Konfiguration ist 'src/main/res/layouts/content/layout'
– cwsu
14. April 2016 um 9:14 Uhr
Ich habe ein Problem mit diesem stackoverflow.com/questions/41934004/…
– Petra Barus
30. Januar 2017 um 10:49 Uhr
Nach einer Weile ohne Glück gesucht, ist dies die einzige Lösung, die für mich funktioniert hat. Vielen Dank, dass Sie eine so ausführliche Antwort mit Bildern gepostet haben!
– Maschinenstamm
30. März 2017 um 14:54 Uhr
Nicht möglich, aber der Layoutordner ist nach Namen sortiert. Also stelle ich den Layout-Dateinamen meine Paketnamen voran. ZB für die beiden Pakete “Kaufen” und “Spielen”:
ich benutze Gruppierung von Android-Dateien Plugin für Android Studio. Es erlaubt Ihnen nicht wirklich, Unterordner zu erstellen, aber es kann Ihre Dateien und Ressourcen ANZEIGEN, WIE sie sich in verschiedenen Ordnern befinden. Und das ist genau das, was ich wollte.
Sie können das Plugin “Android File Grouping” installieren, indem Sie
Fenster:
Android Studio -> Datei -> Einstellungen -> Plugins.
Mac:
Android Studio -> Registerkarte Android Studio (oben links) -> Einstellungen -> Plugins -> JetBrains-Plugin installieren..
Für Mac konnte ich es testen und konnte nicht nach dem Plugin suchen. Also habe ich das Plugin von heruntergeladen Hier und verwendet die Install plugin from disk Option aus der obigen Einstellung.
Teilen Sie auch den Link dieses Plugins!
– Gemeinde Mayani
28. August 2015 um 7:18 Uhr
Getan. Wie auch immer, Sie können immer in Android Studio -> Datei -> Einstellungen -> Plugins nach “Android File Grouping” suchen
– Scharf
28. August 2015 um 10:15 Uhr
Das Plugin funktionierte nicht in der “Android”-Ansicht, nur in der “Projekt”-Ansicht :/
– Hugo Gresse
24. März 2016 um 10:59 Uhr
botbot
Ich denke, die eleganteste Lösung für dieses Problem (da Unterordner nicht erlaubt sind) besteht darin, den Dateinamen den Namen des Ordners voranzustellen, in dem Sie ihn abgelegt hätten. Wenn Sie beispielsweise eine Reihe von Layouts für eine Aktivität, ein Fragment oder nur eine allgemeine Ansicht mit dem Namen “Orte” haben, sollten Sie dieser einfach den Namen “places_my_layout_name” voranstellen. Dies löst zumindest das Problem, sie so zu organisieren, dass sie in der IDE leichter zu finden sind. Es ist nicht die beste Lösung, aber besser als nichts.
Teilen Sie auch den Link dieses Plugins!
– Gemeinde Mayani
28. August 2015 um 7:18 Uhr
Getan. Wie auch immer, Sie können immer in Android Studio -> Datei -> Einstellungen -> Plugins nach “Android File Grouping” suchen
– Scharf
28. August 2015 um 10:15 Uhr
Das Plugin funktionierte nicht in der “Android”-Ansicht, nur in der “Projekt”-Ansicht :/
– Hugo Gresse
24. März 2016 um 10:59 Uhr
Mit Android Studio und Gradle können Sie jetzt mehrere Ressourcenordner in Ihrem Projekt haben. So können Sie nicht nur Ihre Layoutdateien, sondern jede Art von Ressourcen organisieren.
Es ist nicht gerade ein Unterordner, kann aber Teile Ihrer Anwendung trennen.
Die Konfiguration ist wie folgt:
sourceSets {
main {
res.srcDirs = ['src/main/res', 'src/main/res2']
}
}
Mir ist aufgefallen, dass ich jedes Mal, wenn ich unter dieser Einstellung Änderungen an einem Layout vorgenommen habe, immer eine tun musste clean um es in der App zu sehen.
– Pawan Kumar
18. Juni 2015 um 8:50 Uhr
9634000cookie-checkKann der Android-Layoutordner Unterordner enthalten?yes
Gleich wie: stackoverflow.com/questions/2547100/…
– Sebastian Roth
8. Februar 2011 um 7:10 Uhr
Ich denke, dieser Link könnte Ihnen im Detail helfen. blog.mindorks.com/…
– Dilip Poudel
24. September 2017 um 6:31 Uhr