W dokumentacji zestawu SDK systemu Android wszystkie przykłady użyte w składni xml @ drawable / my_image bezpośrednio odnoszą się do obrazów przechowywanych w katalogu res / drawable w moim projekcie.
Zastanawiam się, czy jawnie nie można tworzyć podkatalogów w katalogu, który można wyciągnąć.
Na przykład gdybym miał następujący układ katalogu:
res/drawable
-- sandwiches
-- tunaOnRye.png
-- hamAndSwiss.png
-- drinks
-- coldOne.png
-- hotTea.png
Czy mogę odnieść się do obrazu kanapki z sałatką z tuńczyka jako @ drawable / sandwichwic / tunaOnRye
Czy też muszę utrzymywać płaską hierarchię w katalogu do rysowania.
android
drawable
android-resources
Papryka Lebeck-Jobe
źródło
źródło
Odpowiedzi:
Nie, mechanizm zasobów nie obsługuje podfolderów w katalogu do rysowania, więc tak - musisz utrzymać tę hierarchię na płasko.
Układ katalogu, który pokazałeś, nie spowodowałby, że żaden obraz nie byłby dostępny.
Z moich własnych eksperymentów wydaje się, że posiadanie podfolderu z dowolnymi elementami w
res/drawable
folderze spowoduje awarię kompilatora zasobów - uniemożliwiającR.java
prawidłowe wygenerowanie pliku.źródło
Obejście, którego używam (i ten sam Android wydaje się faworyzować), polega zasadniczo na zastąpieniu podkreślenia znakiem ukośnika, tak aby twoja struktura wyglądała mniej więcej tak:
Podejście to wymaga staranności w nadawaniu nazw i nie ułatwia oszukiwania samych plików (jeśli zdecydujesz, że napoje i kanapki tak naprawdę powinny być „
food
”, musisz dokonać masowej zmiany nazwy, a nie po prostu przenoszenie ich do katalogu); ale złożoność logiki programistycznej nie cierpi zbytnio w porównaniu do równoważnej struktury folderów.Ta sytuacja jest do kitu. Android to mieszanka wspaniałych i okropnych decyzji projektowych. Możemy mieć tylko nadzieję, że ta ostatnia porcja zostanie wyeliminowana z należytym pośpiechem :)
źródło
W rzeczywistości jest to możliwe w Android Studio. Możesz zagnieżdżać zasoby, jak pokazano tutaj :
Istnieje również wtyczka do grupowania zasobów tutaj .
źródło
Tak - to jest do kitu :) Możesz jednak użyć folderu zasobów i mieć tam podkatalogi i w ten sposób ładować obrazy.
źródło
Użyj folderu zasobów.
przykładowy kod:
źródło
Napisałem wtyczkę Eclipse, która pozwala utworzyć wirtualny podfolder, oddzielając nazwę pliku dwoma podkreślnikami
__
. Projekt jest na wczesnym etapie, ale nie martw się, nie spowoduje to awarii Twojego IDEwięcej szczegółów można znaleźć tutaj, nie krępuj się rozwiązywać i wysyłać żądania ściągania:
https://github.com/kirill578/Android-Sorted-Res-Folder
źródło
Lubię używać prostego skryptu, aby spłaszczyć zorganizowaną strukturę katalogów dostarczoną przez projektantów do czegoś, co można wykorzystać do wygenerowania pliku R.
Uruchom z bieżącą ścieżką w drawable-hdpi:
źródło
W Android Studio ze stopniem możesz mieć wielu dyrektorów źródłowych, co pozwoli ci oddzielić zasoby. Na przykład:
Jednak nazwy nie mogą się kolidować, co oznacza, że nadal będziesz musiał mieć nazwy takie jak sandwiches_tunaOnRye, ale będziesz mógł mieć oddzielną sekcję dla wszystkich swoich kanapek.
Umożliwia to przechowywanie zasobów w różnych strukturach (przydatne w przypadku treści generowanych automatycznie, takich jak Actionbargenerator)
źródło
Jednym ze sposobów częściowego obejścia problemu jest użycie sufiksu poziomu interfejsu API. Korzystam z res / layout-v1, res / layout-v2 itp., Aby przechowywać wiele podprojektów w tym samym pliku APK. Tego mechanizmu można używać do wszystkich typów zasobów.
Oczywiście można tego użyć tylko wtedy, gdy celujesz w poziomy API powyżej res / layout-v? ty używasz.
Uważaj również na błąd w Androidzie 1.5 i 1.6. Zobacz dokumentację Andoroid dotyczącą sufiksu poziomu API .
źródło
Wraz z pojawieniem się systemu bibliotecznego rozwiązaniem może być utworzenie biblioteki dla dużego zestawu zasobów.
Jest to nadal problematyczne, ponieważ należy unikać używania tych samych nazw we wszystkich zasobach, ale użycie schematu prefiksu dla biblioteki powinno w tym pomóc.
Nie jest to tak proste, jak tworzenie folderów, ale pomaga zachować rozsądek ...
źródło
Istnieje obejście tego problemu: możesz utworzyć
resVector
(na przykład) folder na tym samym poziomie, cores
folder domyślny . Tam możesz dodać dowolnedrawable-xxx
foldery zasobów:Następnie wystarczy dodać
do twojego
build.gradle
pliku (wewnątrzandroid { }
).źródło
To nie są doskonałe metody. Musisz zaimplementować ten sam sposób, który jest tutaj wyświetlany .
Możesz także wywołać obraz w folderze za pomocą kodu, którego możesz użyć
źródło
Nie mój, ale znalazłem ten wątek, szukając tego problemu, jeśli używasz systemu Android Studio i systemu Gradle Build, jest to dość łatwe, nie wymaga żadnych wtyczek, wystarczy niewielka edycja pliku kompilacji
https://stackoverflow.com/a/22426467/618419
źródło
Gradle z Android Studio może to zrobić w ten sposób ( link ).
Znajduje się w akapicie „Konfigurowanie struktury”
źródło
utwórz folder w głównym. jak: „res_notification_btn”
i utwórz folder drzewa w. jak „rysowalny” lub „układ”
następnie w „build.gradle” dodaj to
źródło
źródło
Zaznacz skrypt Bash Spłaszcz folder, który konwertuje hierarchię folderów na pojedynczy folder
źródło
zasoby / Możesz go użyć do przechowywania plików surowych zasobów. Zapisane tutaj pliki są kompilowane w istniejącym pliku .apk, a oryginalna nazwa pliku zostaje zachowana. Możesz poruszać się po tym katalogu w taki sam sposób, jak w typowym systemie plików za pomocą URI i odczytywać pliki jako strumień bajtów za pomocą AssetManager. Na przykład jest to dobra lokalizacja dla tekstur i danych gry. http://developer.android.com/tools/projects/index.html
źródło
Podkatalogi nie są dozwolone, zasób musi zawierać tylko [a-z0-9_.].
Nie, masz wielkie litery i żadnych ukośników.
źródło
źródło