568 Stimmen

Kann das Android Drawable-Verzeichnis Unterverzeichnisse enthalten?

In der Android SDK-Dokumentation werden in allen Beispielen, die mit der xml-Syntax @drawable/my_image verwendet werden, direkt Bilder angesprochen, die im Verzeichnis res/drawable in meinem Projekt gespeichert sind.

Ich frage mich, ob es explizit nicht in Ordnung ist, ein Unterverzeichnis innerhalb des drawable-Verzeichnisses zu erstellen.

Wenn ich zum Beispiel das folgende Verzeichnislayout hätte:

res/drawable
-- sandwiches
  -- tunaOnRye.png
  -- hamAndSwiss.png
-- drinks
  -- coldOne.png
  -- hotTea.png

Kann ich das Bild eines Thunfischsalat-Sandwiches als @drawable/sandwiches/tunaOnRye referenzieren?

Oder muss ich die Hierarchie im Verzeichnis der Zeichnungselemente flach halten?

22voto

Kirill Kulakov Punkte 9694

Ich habe ein Eclipse-Plugin geschrieben, mit dem man virtuelle Unterordner erstellen kann, indem man den Dateinamen mit zwei Unterstrichen trennt __ . Das Projekt befindet sich in einem frühen Stadium, aber keine Sorge, es wird Ihre IDE nicht zum Absturz bringen.

Weitere Details finden Sie hier, Sie können das Projekt gerne forken und Pull Requests senden:

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

enter image description here

9voto

Rene Punkte 4002

Ich verwende gerne ein einfaches Skript, um eine organisierte Verzeichnisstruktur, die von den Designern zur Verfügung gestellt wird, in eine Form zu bringen, die für die Erstellung einer R-Datei verwendet werden kann.

Mit aktuellem Pfad in drawable-hdpi ausführen:

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

9voto

Alec Holmes Punkte 3555

In Android Studio mit gradle können Sie mehrere Source-Direktoren haben, die es Ihnen ermöglichen, Ressourcen zu trennen. Zum Beispiel:

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

Die Namen dürfen jedoch nicht kollidieren, was bedeutet, dass Sie weiterhin Namen wie sandwiches_tunaOnRye haben müssen, aber Sie können einen separaten Abschnitt für alle Ihre Sandwiches haben.

Damit können Sie Ihre Ressourcen in verschiedenen Strukturen speichern (nützlich für automatisch generierte Inhalte wie actionbargenerator)

6voto

Anton Derevyanko Punkte 3329

Für diese Situation gibt es eine Abhilfe: Sie können eine resVector (zum Beispiel) auf der gleichen Ebene wie der Standardordner res Ordner. Dort können Sie beliebige drawable-xxx Ressource-Ordner dort:

resVector
-drawable
-layout
-color

Danach müssen Sie nur noch Folgendes hinzufügen

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

in Ihr build.gradle Datei (innerhalb android { } ).

3voto

shi Punkte 141

Mit dem Aufkommen des Bibliothekssystems könnte die Erstellung einer Bibliothek für jeden großen Satz von Assets eine Lösung sein.

Es ist immer noch problematisch, da man vermeiden muss, die gleichen Namen in allen Assets zu verwenden, aber die Verwendung eines Präfix-Schemas pro Bibliothek sollte dabei helfen.

Es ist nicht so einfach, wie Ordner zu erstellen, aber das hilft, die Dinge in Ordnung zu halten...

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