Dalam dokumentasi Android SDK, semua contoh yang digunakan dengan sintaks @ drawable / my_image xml secara langsung menangani gambar yang disimpan dalam direktori res / drawable di proyek saya.
Saya bertanya-tanya apakah secara eksplisit tidak apa-apa membuat sub direktori di dalam direktori drawable.
Misalnya, jika saya memiliki tata letak direktori berikut:
res/drawable
-- sandwiches
-- tunaOnRye.png
-- hamAndSwiss.png
-- drinks
-- coldOne.png
-- hotTea.png
Bisakah saya merujuk gambar sandwich salad tuna sebagai @ drawable / sandwiches / tunaOnRye
Atau apakah saya harus menjaga agar hierarki tetap datar di direktori yang dapat digambar.
android
drawable
android-resources
Pepper Lebeck-Jobe
sumber
sumber
Jawaban:
Tidak, mekanisme sumber daya tidak mendukung subfolder di direktori yang dapat digambar, jadi ya - Anda perlu menjaga hierarki tetap datar.
Tata letak direktori yang Anda tampilkan tidak akan menghasilkan gambar yang tersedia.
Dari percobaan saya sendiri, tampaknya memiliki subfolder dengan item apa pun di dalamnya, di dalam
res/drawable
folder, akan menyebabkan kompiler sumber daya gagal - mencegahR.java
file dihasilkan secara benar.sumber
Solusi yang saya gunakan (dan yang disukai oleh Android) adalah mengganti garis bawah untuk garis miring, jadi struktur Anda akan terlihat seperti ini:
Pendekatan mengharuskan Anda untuk cermat dalam penamaan Anda dan tidak membuatnya lebih mudah untuk bertengkar file sendiri (jika Anda memutuskan bahwa minuman dan sandwich harus benar-benar semua "
food
", Anda harus melakukan perubahan nama massal daripada hanya memindahkannya ke direktori); tetapi kompleksitas logika pemrograman Anda tidak terlalu buruk dibandingkan dengan struktur folder yang setara.Situasi ini memang menyebalkan. Android adalah campuran tas keputusan desain yang indah dan mengerikan. Kami hanya bisa berharap untuk bagian yang terakhir untuk disingkirkan dengan tergesa-gesa :)
sumber
Sebenarnya, di Android Studio itu mungkin. Anda dapat memiliki sumber daya bersarang seperti yang ditunjukkan di sini :
Ada juga plugin untuk mengelompokkan sumber daya di sini .
sumber
Ya - itu payah :) Namun Anda dapat menggunakan folder aset dan memiliki sub direktori di sana dan memuat gambar seperti itu.
sumber
Gunakan folder aset.
Kode sampel:
sumber
Saya telah menulis sebuah plugin gerhana yang memungkinkan untuk membuat subfolder virtual dengan memisahkan nama file dengan dua garis bawah
__
. Proyek ini masih dalam tahap awal, tetapi jangan khawatir itu tidak akan merusak IDE Andadetail lebih lanjut dapat ditemukan di sini, silakan garpu dan kirim permintaan tarik:
https://github.com/kirill578/Android-Sorted-Res-Folder
sumber
Saya suka menggunakan skrip sederhana untuk meratakan struktur direktori terorganisir yang disediakan oleh desainer untuk sesuatu yang dapat digunakan untuk menghasilkan file R.
Jalankan dengan jalur saat ini di drawable-hdpi:
sumber
Di studio android dengan gradle Anda dapat memiliki beberapa sumber direktur yang akan memungkinkan Anda untuk memisahkan sumber daya. Sebagai contoh:
Namun nama tidak boleh bertabrakan yang berarti Anda masih perlu memiliki nama seperti sandwiches_tunaOnRye tetapi Anda akan dapat memiliki bagian terpisah untuk semua sandwich Anda.
Ini memungkinkan Anda untuk menyimpan sumber daya di berbagai struktur (berguna untuk konten yang dibuat secara otomatis seperti actionbargenerator)
sumber
Salah satu cara untuk mengatasi sebagian masalah adalah dengan menggunakan akhiran Tingkat API. Saya menggunakan res / layout-v1, res / layout-v2 dll untuk mengadakan beberapa sub proyek di apk yang sama. Mekanisme ini dapat digunakan untuk semua jenis sumber daya.
Jelas, ini hanya dapat digunakan jika Anda menargetkan level API di atas res / layout-v? Anda menggunakan.
Juga, perhatikan bug di Android 1.5 dan 1.6. Lihat dokumentasi Andoroid tentang akhiran Level API .
sumber
Dengan munculnya sistem perpustakaan, membuat perpustakaan per set besar aset bisa menjadi solusi.
Ini masih bermasalah karena kita harus menghindari menggunakan nama yang sama dalam semua aset tetapi menggunakan skema awalan per pustaka akan membantu dengan itu.
Ini tidak sesederhana membuat folder tetapi itu membantu menjaga hal-hal tetap waras ...
sumber
Ada solusi untuk situasi ini: Anda dapat membuat
resVector
folder (misalnya) pada level yang sama denganres
folder default . Di sana Anda dapat menambahkandrawable-xxx
folder sumber daya apa pun di sana:Setelah itu yang Anda butuhkan hanyalah menambahkan
ke dalam
build.gradle
file Anda (di dalamandroid { }
).sumber
Ini bukan metode yang sempurna. Anda harus menerapkan cara yang sama yang ditampilkan di sini .
Anda juga dapat memanggil gambar di bawah folder melalui kode yang dapat Anda gunakan
sumber
Bukan milik saya, tetapi saya menemukan utas ini ketika mencari masalah ini, jika Anda menggunakan Android Studio dan sistem Gradle Build-nya cukup mudah, tidak ada plugin yang diperlukan.
https://stackoverflow.com/a/22426467/618419
sumber
Gradle dengan Android Studio dapat melakukannya dengan cara ini ( tautan ).
Itu ada di paragraf "Mengkonfigurasi Struktur"
sumber
buat folder di main. seperti: 'res_notification_btn'
dan buat folder pohon masuk. seperti 'drawable' atau 'layout'
lalu di 'build.gradle' tambahkan ini
sumber
sumber
Periksa skrip Bash Flatten Folder yang mengubah hierarki folder menjadi satu folder
sumber
aset / Anda dapat menggunakannya untuk menyimpan file aset mentah. File yang Anda simpan di sini dikompilasi menjadi file .apk apa adanya, dan nama file asli dipertahankan. Anda dapat menavigasi direktori ini dengan cara yang sama seperti sistem file khas menggunakan URI dan membaca file sebagai aliran byte menggunakan AssetManager. Sebagai contoh, ini adalah lokasi yang bagus untuk tekstur dan data game. http://developer.android.com/tools/projects/index.html
sumber
Subdirektori tidak diizinkan, sumber daya harus mengandung hanya [a-z0-9_.].
Tidak, Anda memiliki huruf besar, dan tidak ada garis miring.
sumber
sumber