Saat ini, saya menyimpan setiap file layout xml di dalam res/layout
folder, sehingga layak dan sederhana untuk mengelola proyek-proyek kecil, tetapi ketika ada kasus proyek besar dan berat, maka harus ada hirarki dan sub-folder yang diperlukan di dalam folder tata letak.
untuk mis
layout
-- layout_personal
-- personal_detail.xml
-- personal_other.xml
--layout_address
-- address1.xml
-- address2.xml
Seperti cara yang sama, kami ingin memiliki sub-folder untuk aplikasi besar, jadi apakah ada cara untuk melakukannya di dalam proyek android?
Saya dapat membuat sub-folder layout-personal dan layout_address di dalam folder layout, tetapi ketika tiba saatnya untuk mengakses file layout xml menggunakan R.layout ._______, pada saat itu tidak ada pop-up layout xml di dalam Tidak bisa.
android
android-layout
Paresh Mayani
sumber
sumber
Jawaban:
Anda BISA melakukan ini dengan gradle. Saya telah membuat proyek demo yang menunjukkan caranya.
Caranya adalah dengan menggunakan kemampuan gradle untuk menggabungkan beberapa folder sumber daya , dan mengatur folder res serta subfolder bersarang di blok sourceSets.
Masalahnya adalah bahwa Anda tidak dapat mendeklarasikan folder sumber daya wadah sebelum Anda mendeklarasikan folder sumber daya anak folder itu.
Di bawah ini adalah blok sourceSet dari file build.gradle dari demo. Perhatikan bahwa subfolder dideklarasikan terlebih dahulu.
Juga, induk langsung dari file sumber daya Anda yang sebenarnya (png, tata letak xml, dll.) Masih harus sesuai dengan spesifikasi .
sumber
R.layout.list_item
datang darimovies
ataucinemas
folder, begitu datar penamaan masih berlaku.build:gradle:0.14.4
danbuildToolsVersion "21.1.1"
.URI is not registered
masalah tersebut.Jawabannya adalah tidak.
Saya ingin menarik perhatian Anda terhadap buku ini Pro Android 2 yang menyatakan:
sumber
raw
sebagai sumber daya Anda mendapatkan striping kepadatan / orientasi / versi / dll, sementaraassets
Anda harus melakukannya secara manual.Saya hanya ingin menambahkan jawaban fantastis eski untuk orang-orang yang bermasalah. (Catatan: Ini hanya akan berfungsi dan terlihat seperti direktori terpisah di dalam tampilan 'proyek', bukan tampilan 'android'.)
Diuji dengan yang berikut ini. BuildToolsVersion = 23.0.0 tingkat 1.2.3 & 1.3.0
Beginilah cara saya mendapatkan tambang untuk bekerja dengan proyek yang sudah dibangun.
Setelah ini selesai, masuk ke file module gradle.build Anda dan buat definisi sourceSet seperti ini ... (Pastikan 'src / main / res / layouts' & 'src / main / res' selalu berada di dua terbawah !! !! Seperti yang saya tunjukkan di bawah).
Untung $$$$
Tapi serius .. beginilah cara saya membuatnya bekerja. Beritahu saya jika ada yang punya pertanyaan .. Saya dapat mencoba membantu.
Gambar lebih berharga daripada kata-kata.
sumber
layout-v21
?'src/main/res/layouts/content'
dan jalur konfigurasi ini adalah'src/main/res/layouts/content/layout'
Tidak mungkin, tetapi folder layout diurutkan berdasarkan nama. Jadi, saya menambahkan nama file layout dengan nama paket saya. Misalnya untuk dua paket "membeli" dan "bermain":
sumber
Saya menggunakan plugin Pengelompokan File Android untuk Studio.It Android tidak benar-benar memungkinkan Anda untuk membuat sub-folder, tetapi dapat menampilkan file dan sumber daya Anda seperti mereka berada di folder yang berbeda. Dan inilah yang saya inginkan.
Anda dapat menginstal plugin "Android File Grouping" dengan
Windows:
Mac:
Untuk Mac, saya bisa mengujinya dan tidak dapat mencari plugin. Jadi saya mengunduh plugin dari sini dan menggunakan
Install plugin from disk
opsi dari pengaturan di atas.sumber
Sekarang dengan Android Studio dan Gradle, Anda dapat memiliki beberapa folder sumber daya di proyek Anda. Mengizinkan tidak hanya mengatur file tata letak Anda tetapi juga segala jenis sumber daya.
Ini bukan sub-folder, tetapi dapat memisahkan bagian dari aplikasi Anda.
Konfigurasi seperti ini:
Periksa dokumentasinya .
sumber
clean
untuk melihatnya tercermin pada aplikasi.Saya pikir solusi paling elegan untuk masalah ini (mengingat bahwa subfolder tidak diperbolehkan) adalah dengan menambahkan nama file dengan nama folder tempat Anda meletakkannya. Misalnya, jika Anda memiliki banyak tata letak untuk Aktivitas, Fragmen, atau hanya tampilan umum yang disebut "tempat" maka Anda hanya perlu menambahkannya dengan places_my_layout_name. Setidaknya ini memecahkan masalah pengorganisasian mereka dengan cara yang lebih mudah ditemukan dalam IDE. Ini bukan solusi yang paling luar biasa, tetapi lebih baik daripada tidak sama sekali.
sumber
Masalah kecil
Saya dapat mencapai subfolder dengan mengikuti jawaban teratas untuk pertanyaan ini.
Namun, ketika proyek bertambah besar, Anda akan memiliki banyak sub-folder:
Bukan masalah besar, tapi:
app/build.gradle
setiap kali Anda menambahkan folder baru.Perbaikan
Jadi saya menulis metode Groovy sederhana untuk mengambil semua folder bersarang:
Rekatkan metode ini di luar
android {...}
blok diapp/build.gradle
.Cara Penggunaan
Untuk struktur seperti ini:
Gunakan seperti ini:
Jika Anda memiliki struktur seperti ini:
Anda akan menggunakannya seperti ini:
Penjelasan
getLayoutList()
mengambila relative path
sebagai argumen. Inirelative path
relatif terhadap akar proyek. Jadi ketika kita input"app/src/main/res/layouts/"
, itu akan mengembalikan semua nama subfolder sebagai array, yang akan persis sama dengan:Berikut naskah dengan komentar untuk dipahami:
Semoga ini bisa membantu!
sumber
setContentView(R.layout.Admin.admin_home .)
Admin.admin_home tidak terselesaikanR.layout.admin_home
. Skrip harus dapat mengambil nama untuk Anda secara otomatis. Beri tahu saya jika Anda dapat membuatnya berfungsi.array.push("src/main/res");
untukdef res="src/main/res";
array.push(res);
karena saya memiliki kesalahan push ingin gstring parameter tidak String satu .if salah satu daripada saya menemukan kesalahan ini Anda dapat mengeditnya// uncomment for debugging
dan kemudian memeriksa apakah outputsrc/main/res/layouts/<your_layout_files>
terdeteksi dengan benar?Sekarang kita dapat dengan mudah melakukannya dengan plugin JetBrains yang disebut " Pengelompokan File Android "
lihat tautan ini
Pengelompokan File Android
sumber
Android Studio
Cara saya melakukannya adalah membuat folder res terpisah pada tingkat yang sama dengan folder res aktual di proyek Anda, maka Anda dapat menggunakan ini di aplikasi Anda build.gradle
maka setiap subfolder dari folder res baru Anda dapat menjadi sesuatu yang berkaitan dengan setiap layar tertentu atau sesuatu di aplikasi Anda, dan setiap folder akan memiliki
layout
/drawable
/values
etc menjaga semuanya teratur dan Anda tidak perlu memperbarui file gradle secara manual seperti beberapa lainnya ini jawaban diperlukan (Hanya menyinkronkan gradle Anda setiap kali Anda menambahkan folder sumber daya baru sehingga tahu tentangnya, dan pastikan untuk menambahkan subfolder yang relevan sebelum menambahkan file xml Anda).sumber
Periksa skrip Bash Flatten Folder yang mengubah hierarki folder menjadi satu folder
sumber
Jika Anda mengembangkan di linux atau kotak mac, solusinya adalah, untuk membuat subfolder yang menyertakan tautan simbolis ke file layout Anda. Cukup gunakan perintah ln dengan -s
Masalahnya adalah, folder Layout Anda masih berisi semua file .xml. Tetapi Anda dapat memilihnya dengan menggunakan sub-folder. Ini hal terdekat, dengan apa yang ingin Anda miliki.
Saya baru saja membaca, bahwa ini mungkin bekerja dengan Windows, juga jika Anda menggunakan Vista atau yang lebih baru. Ada
mklink
perintah ini . Hanya google saja, belum pernah menggunakannya sendiri.Masalah lain adalah, jika Anda memiliki file yang dibuka dan mencoba untuk membukanya lagi, plugin akan melempar NULL Pointer Exception. Tapi itu tidak menutup telepon.
sumber
Meskipun semua proposal untuk beberapa rangkaian sumber daya dapat berfungsi, masalahnya adalah bahwa logika saat ini untuk plug-in Android Studio Gradle tidak akan memperbarui file sumber daya setelah mereka berubah untuk kumpulan sumber daya bersarang. Implementasi saat ini mencoba untuk memeriksa direktori sumber daya menggunakan beginWith (), sehingga struktur direktori yang bersarang (yaitu src / main / res / tata letak / tata letak dan src / main / res / tata letak / layouts_category2) akan memilih src / main / res / layout / layout secara konsisten dan tidak pernah benar-benar memperbarui perubahan. Hasil akhirnya adalah Anda harus membangun kembali / membersihkan proyek setiap kali.
Saya mengirimkan tambalan di https://android-review.googlesource.com/#/c/157971/ untuk mencoba membantu menyelesaikan berbagai hal.
sumber
Jawaban teratas oleh @eski bagus, tetapi kodenya tidak elegan untuk digunakan, jadi saya menulis skrip groovy untuk penggunaan umum. Ini diterapkan untuk semua tipe dan rasa produk dan tidak hanya dapat digunakan untuk tata letak, Anda juga dapat menambahkan subfolder untuk semua jenis sumber daya lain seperti drawable. Berikut ini kodenya (letakkan di
android
blok file gradle tingkat proyek) :Bagaimana melakukan dalam praktek?
Sebagai contoh, saya ingin membuat subfolder bernama
activity
untuklayout
, menambahkan string dengan nama apa pun dalamresDirs
variabel sepertilayouts
, maka file layout xml harus dimasukkan ke dalamres\layouts\activity\layout\xxx.xml
.Jika saya ingin membuat subfolder bernama
selectors
untukdrawable
, tambahkan string dengan nama apa pun dalamresDirs
variabel sepertidrawables
, maka file xml yang dapat ditarik harus dimasukkanres\drawables\selectors\drawable\xxx.xml
.Nama folder seperti
layouts
dandrawables
didefinisikan dalamresDirs
variabel, bisa berupa string apa saja. Semua subfolder yang dibuat oleh Anda sepertiactivity
atauselectors
dianggap sama denganres
folder. Jadi masukselectors
folder, kita harus membuatdrawable
folder tambahan dan meletakkan file xml didrawable
folder, setelah itu gradle dapat mengenali file xml sebagai gambar normal.sumber
Jika Anda menggunakan metode ini dalam jawaban yang disetujui, dan ingin sedikit meningkatkannya, maka ubah pengaturan gradle seperti ini:
Jadi jika Anda menambahkan lebih banyak folder dan tata letak, Anda tidak perlu kembali ke sini dan menambahkan daftar panjang folder sumber, biarkan gradle mendapatkan semua folder untuk Anda.
sumber
sumber
Project
mode. Saya tidak bisa mengerti di mana subfolder menghilang (dalamAndroid
mode).Jawaban singkatnya adalah tidak. Tetapi Anda pasti dapat memiliki beberapa
res
folder. Saya pikir, sedekat mungkin dengan subfolder untuklayout
folder tersebut. Begini caranya.sumber
Jawaban teratas memiliki beberapa kelemahan: Anda harus menambahkan jalur tata letak baru, AS menempatkan sumber daya baru ke
res\layouts
folder alih-alihres\values
.Menggabungkan beberapa jawaban yang saya tulis serupa:
Saya membuat folder dengan artikel ini: http://alexzh.com/tutorials/how-to-store-layouts-in-different-folders-in-android-project/ . Untuk membuat subfolder Anda harus menggunakan menu ini: Baru> Folder> Folder Res.
MEMPERBARUI
Setelah beberapa minggu saya menemukan bahwa perubahan sumber daya tidak diperhatikan oleh Android Studio . Jadi, beberapa bug aneh muncul. Misalnya, tata letak terus menunjukkan ukuran lama, margin. Terkadang AS tidak menemukan file XML baru (terutama saat run-time). Terkadang itu mencampur
view id
s (referensi ke file XML lain). Sering kali diperlukan untuk menekanBuild > Clean Project
atauBuild > Rebuild Project
. BacaDiperlukan Rebuild setelah mengubah file tata letak xml di Android Studio .sumber
res
folder tradisional , karena AS tidak sepenuhnya mendukung pembagian sumber daya ke dalam folder. Mungkin saya akan mengubah jawaban ini atau bahkan menghapus. Tapi apa yang Anda maksud ketika mengatakan bahwa ini bukan cara yang dapat diterima untuk memberikan solusi di sini pada SO?Tidak dapat memiliki subdirektori (dengan mudah) tetapi Anda dapat memiliki folder sumber daya tambahan . Terkejut tidak ada yang menyebutkannya, tetapi untuk menjaga folder sumber daya default , dan menambahkan lagi:
sumber