628 Stimmen

Können im Android-Layoutordner Unterordner enthalten sein?

Aktuell speichere ich jede XML-Layoutdatei im Ordner 'res/layout', um kleine Projekte einfach und übersichtlich verwalten zu können. Bei großen und umfangreichen Projekten ist jedoch eine Hierarchie und Unterordner im Layout-Ordner erforderlich.

zum Beispiel

layout
-- layout_personal
   -- personal_detail.xml
   -- personal_other.xml
--layout_address
  -- address1.xml
  -- address2.xml

Auf die gleiche Weise möchten wir Unterordner für die große Anwendung haben, gibt es eine Möglichkeit, dies im Android-Projekt zu tun?

Ich kann Unterordner layout-personal und layout_adress innerhalb des layout-Ordners erstellen, aber wenn es darum geht, auf die XML-Layoutdatei mit R.layout._______ zuzugreifen, wird keine XML-Layoutdatei im Menü angezeigt.

0 Stimmen

0 Stimmen

Ich denke, dieser Link könnte Ihnen weiterhelfen. blog.mindorks.com/…

522voto

eski Punkte 7849

Du kannst das mit gradle machen. Ich habe ein Demo-Projekt erstellt, das zeigt, wie es gemacht wird.

Der Trick besteht darin, die Funktion von Gradle zu nutzen, um mehrere Ressourcenordner zusammenzuführen und den res-Ordner sowie die verschachtelten Unterordner im sourceSets-Block festzulegen.

Die Eigenheit besteht darin, dass du einen Ressourcenordnercontainer nicht deklarieren kannst, bevor du die Unterrressourcenordner dieses Ordners deklarierst.

Im Folgenden ist der sourceSets-Block aus der build.gradle-Datei des Demos. Beachte, dass die Unterordner zuerst deklariert werden.

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

Bild von verschachtelten Ressourcen

Außerdem muss der direkte Elternordner deiner tatsächlichen Ressourcendateien (pngs, XML-Layouts usw.) immer noch mit der Spezifikation übereinstimmen.

8 Stimmen

Ist es möglich, dies mit den drawable-Ordnern zu tun? Ich habe es gerade versucht, leider ohne Erfolg, auch unter Berücksichtigung der Deklarationsreihenfolge.

1 Stimmen

Ja, es funktioniert für alle Arten von Ressourcen. Ich benutze es, um die Unmenge an drawable-Dateien zu trennen, die der Holo-Themengenerator erstellt. Wie sieht deine Dateistruktur und deine build.gradle-Datei aus?

1 Stimmen

Ich verwende die alte Projektstruktur, wo src und res auf Projektebene liegen. Ich habe versucht, meine res.srcDirs auf ['res/drawable/test','res'] zu setzen, und es hat nicht funktioniert. Nachdem ich meine Gradle Struktur synchronisiert habe, hat AS den drawable nicht erkannt, den ich in den drawable/test Ordner gelegt habe.

247voto

100rabh Punkte 6136

Die Antwort ist nein.

Ich möchte Ihre Aufmerksamkeit auf dieses Buch Pro Android 2 lenken, das besagt:

Es ist auch erwähnenswert, dass es einige Einschränkungen in Bezug auf Ressourcen gibt. Zunächst unterstützt Android nur eine lineare Liste von Dateien in den vordefinierten Ordnern unter res. Zum Beispiel unterstützt es keine verschachtelten Ordner unter dem layout-Ordner (oder den anderen Ordnern unter res).

Zweitens gibt es einige Ähnlichkeiten zwischen dem assets-Ordner und dem raw-Ordner unter res. Beide Ordner können Rohdateien enthalten, aber die Dateien im raw-Ordner gelten als Ressourcen und die Dateien im assets-Ordner nicht.

Beachten Sie, dass, da der Inhalt des assets-Ordners nicht als Ressourcen betrachtet wird, Sie eine beliebige Hierarchie von Ordnern und Dateien darin platzieren können.

4 Stimmen

Ich denke, unsere nächste beste Hoffnung wäre ein Eclipse- oder IntelliJ-Plugin, das die Dateien basierend auf Dateinamenpräfixen zusammenfalten könnte.

17 Stimmen

@Justin überprüfe die Lösung, die ich für Gradle gepostet habe.

0 Stimmen

Ich nehme an, eine Lösung könnte sein, die Dateien so zu benennen, wie Sie sie kategorisieren möchten, damit es aussieht, als ob sie in Unterordnern liegen. Ich füge einen "Unterordner-Tag" am Anfang des Namens hinzu. Zum Beispiel würden alle Aktivitäten "activity_activityname.xml" sein und eine untergeordnete Aktivität könnte "activity_activityname_childactivity.xml" sein und so weiter. Jede andere Datei würde "other_filename.xml" sein. Das ist das, was ich mache, um Verwirrung zu vermeiden. Verdammt, jemand war schneller als ich. Um drei Jahre >.< Mein Fehler, hatte das nicht gesehen.

91voto

Nick H Punkte 8499

Ich wollte einfach die fantastische Antwort von eskis für Leute ergänzen, die Schwierigkeiten haben. (Hinweis: Dies funktioniert und sieht nur wie separate Verzeichnisse innerhalb der 'Projekt'-Ansicht aus, nicht leider in der 'Android'-Ansicht.)

Getestet mit folgendem: BuildToolsVersion = 23.0.0 gradle 1.2.3 & 1.3.0

So habe ich meins zum Laufen gebracht mit einem bereits erstellten Projekt.

  1. Kopiere alle XML-Dateien aus deinem Layout-Verzeichnis und lege sie in ein Verzeichnis auf dem Desktop oder ähnliches zur Sicherung.

  2. Lösche das gesamte Layout-Verzeichnis (Stelle sicher, dass du alles sicherst, was du in Schritt 1 gemacht hast!!!)

  3. Klicke mit der rechten Maustaste auf das res-Verzeichnis und wähle neu > Verzeichnis.

  4. Nenne dieses neue Verzeichnis "layouts". (Das kann sein, was du willst, aber es wird kein 'Fragment'-Verzeichnis oder 'Aktivitäts'-Verzeichnis sein, das kommt später).

  5. Klicke mit der rechten Maustaste auf das neue "layouts"-Verzeichnis und wähle neu > Verzeichnis. (Das wird der Name der Art von XML-Dateien sein, die du darin haben wirst, zum Beispiel 'Fragments' und 'Aktivitäten').

  6. Klicke mit der rechten Maustaste auf das 'Fragment'- oder 'Aktivitäts'-Verzeichnis (Hinweis: das muss nicht 'Fragment' oder 'Aktivitäten' sein, das ist nur ein Beispiel) und wähle erneut neu > Verzeichnis und nenne dieses Verzeichnis "layout". (Hinweis: Das MUSS 'layout' genannt werden!!! sehr wichtig).

  7. Lege die XML-Dateien, die du möchtest, in das neue 'layout'-Verzeichnis aus dem Backup, das du auf deinem Desktop gemacht hast.

  8. Wiederhole die Schritte 5 - 7 für so viele eigene Verzeichnisse, wie du möchtest.

  9. Wenn dies abgeschlossen ist, gehe in deine modules gradle.build-Datei und erstelle eine sourceSets-Definition wie folgt... (Stelle sicher, dass 'src/main/res/layouts' & 'src/main/res' immer die beiden untersten sind!!!! Wie ich es unten zeige).

    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. Profit $$$$

Aber im Ernst... so habe ich es zum Laufen gebracht. Lass es mich wissen, wenn jemand Fragen hat... Ich kann versuchen zu helfen.

Bilder sagen mehr als Worte.

Verzeichnisstruktur

1 Stimmen

Was ist mit Layout-Verzeichnissen wie layout-v21?

5 Stimmen

Ich habe es nicht getestet, aber ich könnte mir vorstellen, dass man einfach einen layout-v21-Ordner neben den layout-Ordnern erstellt.

0 Stimmen

Funktioniert auf Gradle 2.0.0 und buildToolsVersion 23.0.2! Beachte, dass der Konfigurationswert 'src/main/res/layouts/content' ist und der Pfad dieser Konfiguration 'src/main/res/layouts/content/layout' ist.

57voto

delformo Punkte 991

Nicht möglich, aber der Layout-Ordner ist nach Namen sortiert. Daher füge ich meinen Paketnamen den Layout-Dateinamen voran. Zum Beispiel für die zwei Pakete "buying" und "playing":

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

22voto

Sharpe Punkte 386

Ich benutze das Android File Grouping Plugin für Android Studio. Es erlaubt dir nicht wirklich, Unterordner zu erstellen, aber es kann deine Dateien und Ressourcen so DARSTELLEN, wie sie in verschiedenen Ordnern sind. Und das ist genau das, was ich wollte.

Du kannst das "Android File Grouping" Plugin installieren, indem du

Windows:

Android Studio -> Datei -> Einstellungen -> Plugins.

Mac:

Android Studio -> Android Studio Tab (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 hier heruntergeladen und die Option Plugin von Disk installieren aus den obigen Einstellungen verwendet.

0 Stimmen

Bitte teilen Sie auch den Link zu diesem Plugin!

0 Stimmen

Fertig. Auf jeden Fall kannst du immer nach "Android-Dateigruppierung" in Android Studio -> Datei -> Einstellungen -> Plugins suchen.

3 Stimmen

Der Plugin hat nicht auf der "Android"-Ansicht funktioniert, nur auf der "Projekt"-Ansicht :/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X