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?

597voto

Reto Meier Punkte 95825

Nein, der Ressourcen-Mechanismus unterstützt keine Unterordner im zeichenbaren Verzeichnis, also ja - Sie müssen diese Hierarchie flach halten.

Das von Ihnen gezeigte Verzeichnislayout würde dazu führen, dass keines der Bilder verfügbar wäre.

Nach meinen eigenen Experimenten scheint es, dass ein Unterordner mit beliebigen Elementen in der res/drawable Ordner, wird der Ressourcen-Compiler fehlschlagen - er verhindert, dass die R.java Datei nicht korrekt generiert werden.

166voto

Cheezmeister Punkte 4839

Der Workaround, den ich verwende (und den Android selbst zu bevorzugen scheint), besteht im Wesentlichen darin, den Schrägstrich durch einen Unterstrich zu ersetzen, so dass Ihre Struktur etwa so aussehen würde:

sandwich_tunaOnRye.png
sandwich_hamAndSwiss.png
drink_coldOne.png
drink_hotTea.png

Dieser Ansatz erfordert eine akribische Benennung und macht es nicht einfacher, die Dateien selbst zu verwalten (wenn Sie beschlossen haben, dass Getränke und Sandwiches eigentlich alle " food ", müssten Sie sie massenhaft umbenennen, anstatt sie einfach in das Verzeichnis zu verschieben); aber die Komplexität Ihrer Programmierlogik leidet nicht darunter zu schlecht im Vergleich zu der entsprechenden Ordnerstruktur.

Diese Situation ist wirklich beschissen. Android ist eine gemischte Tüte aus wunderbaren und schrecklichen Designentscheidungen. Wir können nur hoffen, dass der letztere Teil mit aller gebotenen Eile ausgemerzt wird :)

45voto

android developer Punkte 111449

Unter Android Studio ist dies tatsächlich möglich. Sie können verschachtelte Ressourcen wie gezeigt haben ici :

enter image description here

Es gibt auch ein Plugin zum Gruppieren von Ressourcen ici .

Ich empfehle jedoch, dies zu vermeiden.

40voto

dijipiji Punkte 2887

Ja - es ist wirklich scheiße :) Sie können jedoch den Ordner "Assets" verwenden und dort Unterverzeichnisse einrichten, um Bilder auf diese Weise zu laden.

24voto

milkia Punkte 255

Verwenden Sie den Ordner Assets.

Beispiel-Code:

InputStream is = null;
try {
    is = this.getResources().getAssets().open("test/sample.png");
} catch (IOException e) {
    ;
}

image = BitmapFactory.decodeStream(is);

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