In der Android SDK-Dokumentation adressieren alle Beispiele, die mit der XML-Syntax @ drawable / my_image verwendet werden, direkt Bilder, die im Verzeichnis res / drawable in meinem Projekt gespeichert sind.
Ich frage mich, ob es ausdrücklich nicht in Ordnung ist, ein Unterverzeichnis innerhalb des Zeichenverzeichnisses zu erstellen.
Zum Beispiel, wenn ich das folgende Verzeichnislayout hätte:
res/drawable
-- sandwiches
-- tunaOnRye.png
-- hamAndSwiss.png
-- drinks
-- coldOne.png
-- hotTea.png
Könnte ich das Bild eines Thunfischsalat-Sandwichs als @ drawable / sandwiches / tunaOnRye bezeichnen?
Oder muss ich die Hierarchie im Zeichenverzeichnis flach halten?
android
drawable
android-resources
Pfeffer Lebeck-Jobe
quelle
quelle
Antworten:
Nein, der Ressourcenmechanismus unterstützt keine Unterordner im Zeichenverzeichnis. Ja, Sie müssen diese Hierarchie flach halten.
Das von Ihnen angezeigte Verzeichnislayout würde dazu führen, dass keines der Bilder verfügbar ist.
Aus meinen eigenen Experimenten geht hervor, dass ein Unterordner mit Elementen im
res/drawable
Ordner dazu führt, dass der Ressourcen-Compiler fehlschlägt und dieR.java
Datei nicht korrekt generiert wird.quelle
Die Problemumgehung, die ich verwende (und die Android selbst zu bevorzugen scheint), besteht darin, einen Schrägstrich durch einen Unterstrich zu ersetzen, sodass Ihre Struktur ungefähr so aussehen würde:
Der Ansatz erfordert, dass Sie bei der Benennung akribisch vorgehen und es nicht viel einfacher machen, die Dateien selbst zu bearbeiten (wenn Sie entschieden haben, dass Getränke und Sandwiches wirklich alle "
food
" sein sollten, müssten Sie eine Massenumbenennung vornehmen , anstatt einfach Verschieben in das Verzeichnis); Die Komplexität Ihrer Programmierlogik leidet jedoch nicht allzu stark im Vergleich zur entsprechenden Ordnerstruktur.Diese Situation ist in der Tat scheiße. Android ist eine Mischung aus wunderbaren und schrecklichen Designentscheidungen. Wir können nur hoffen, dass der letzte Teil mit aller Eile ausgesondert wird :)
quelle
Eigentlich ist es unter Android Studio möglich. Sie können verschachtelte Ressourcen wie hier gezeigt haben :
Es gibt auch ein Plugin Gruppe Ressourcen hier .
quelle
Ja - es ist scheiße :) Sie können jedoch den Assets-Ordner verwenden und dort Unterverzeichnisse haben und Bilder auf diese Weise laden.
quelle
Verwenden Sie den Assets-Ordner.
Beispielcode:
quelle
Ich habe ein Eclipse-Plugin geschrieben, mit dem Sie einen virtuellen Unterordner erstellen können, indem Sie den Dateinamen durch zwei Unterstriche trennen
__
. Das Projekt befindet sich in einem frühen Stadium, aber keine Sorge, es wird Ihre IDE nicht zum Absturz bringenWeitere Details finden Sie hier. Sie können gerne Pull-Anfragen senden:
https://github.com/kirill578/Android-Sorted-Res-Folder
quelle
Ich verwende gerne ein einfaches Skript, um eine von Designern bereitgestellte organisierte Verzeichnisstruktur auf etwas zu reduzieren, mit dem eine R-Datei generiert werden kann.
Mit aktuellem Pfad in drawable-hdpi ausführen:
quelle
In Android Studio mit Gradle können Sie mehrere Quelldirektoren haben, mit denen Sie Ressourcen trennen können. Zum Beispiel:
Die Namen dürfen jedoch nicht kollidieren, was bedeutet, dass Sie weiterhin Namen wie Sandwiches_tunaOnRye benötigen, aber Sie können einen separaten Abschnitt für alle Ihre Sandwiches haben.
Auf diese Weise können Sie Ihre Ressourcen in verschiedenen Strukturen speichern (nützlich für automatisch generierte Inhalte wie den Aktionsleistengenerator).
quelle
Eine Möglichkeit, das Problem teilweise zu umgehen, besteht darin, das Suffix API Level zu verwenden. Ich benutze res / layout-v1, res / layout-v2 usw., um mehrere Unterprojekte in derselben apk zu halten. Dieser Mechanismus kann für alle Ressourcentypen verwendet werden.
Dies kann natürlich nur verwendet werden, wenn Sie API-Ebenen über dem res / layout-v? du benutzt.
Achten Sie auch auf den Fehler in Android 1.5 und 1.6. Weitere Informationen zum Suffix API Level finden Sie in der Andoroid-Dokumentation .
quelle
Mit dem Aufkommen des Bibliothekssystems könnte das Erstellen einer Bibliothek pro großen Satz von Assets eine Lösung sein.
Es ist immer noch problematisch, da man vermeiden muss, in allen Assets dieselben Namen zu verwenden, aber die Verwendung eines Präfixschemas pro Bibliothek sollte dabei helfen.
Es ist nicht so einfach, Ordner zu erstellen, aber das hilft, die Dinge gesund zu halten ...
quelle
Für diese Situation gibt es eine Problemumgehung: Sie können einen
resVector
(beispielsweise) Ordner auf derselben Ebene wie den Standardordner erstellenres
. Dort können Sie beliebigedrawable-xxx
Ressourcenordner hinzufügen :Danach müssen Sie nur noch hinzufügen
in Ihre
build.gradle
Datei (innenandroid { }
).quelle
Dies ist keine perfekte Methode. Sie müssen dieselbe Art und Weise implementieren , die Anzeige ist hier .
Sie können das Bild unter dem Ordner auch über den Code aufrufen, den Sie verwenden können
quelle
Nicht meins, aber ich habe diesen Thread gefunden, als ich nach diesem Problem gesucht habe. Wenn Sie Android Studio und Gradle Build verwenden, ist es ziemlich einfach, keine Plugins erforderlich, nur ein wenig Bearbeitung der Build-Datei
https://stackoverflow.com/a/22426467/618419
quelle
Gradle mit Android Studio könnte es so machen ( Link ).
Es steht im Abschnitt "Konfigurieren der Struktur"
quelle
Erstellen Sie einen Ordner in main. wie: 'res_notification_btn'
und erstellen Sie einen Baumordner in. wie 'zeichnbar' oder 'Layout'
Fügen Sie dies dann in 'build.gradle' hinzu
quelle
quelle
Prüfen Bash Flatten Ordner Skript , dass Konvertiten Ordner - Hierarchie in einem einzelnen Ordner
quelle
Assets / Sie können damit Roh-Asset-Dateien speichern. Dateien, die Sie hier speichern, werden unverändert in eine APK-Datei kompiliert, und der ursprüngliche Dateiname bleibt erhalten. Sie können in diesem Verzeichnis wie in einem typischen Dateisystem mithilfe von URIs navigieren und Dateien mit dem AssetManager als Bytestrom lesen. Dies ist beispielsweise ein guter Ort für Texturen und Spieldaten. http://developer.android.com/tools/projects/index.html
quelle
Unterverzeichnisse sind nicht zulässig, die Ressource darf nur [a-z0-9_.] Enthalten.
Nein, Sie haben Großbuchstaben und keine Schrägstriche.
quelle
quelle