Bisakah folder Android Layout berisi subfolder?


551

Saat ini, saya menyimpan setiap file layout xml di dalam res/layoutfolder, 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.



Saya pikir tautan ini mungkin membantu Anda secara detail. blog.mindorks.com/...
Dilip Poudel

Jawaban:


475

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.

sourceSets {
    main {
        res.srcDirs =
        [
                'src/main/res/layouts/layouts_category2',
                'src/main/res/layouts',
                'src/main/res'
        ]
    }
}

gambar sumber daya bersarang

Juga, induk langsung dari file sumber daya Anda yang sebenarnya (png, tata letak xml, dll.) Masih harus sesuai dengan spesifikasi .


6
Apakah mungkin melakukan ini dengan folder yang dapat digambar? Saya hanya mencoba tanpa hasil, bahkan dengan mempertimbangkan pemesanan deklarasi.
trevor-e

7
Bagus! Hanya ingat bahwa Anda benar-benar hanya mengeksploitasi kemampuan gradle untuk menggabungkan folder sumber daya dan itu masuk akal.
eski

5
Nama-nama file dalam folder masih harus unik dan dalam kode Anda harus tahu bahwa misalnya R.layout.list_itemdatang dari moviesatau cinemasfolder, begitu datar penamaan masih berlaku.
TWiStErRob

5
Sayangnya itu tidak bekerja untuk saya build:gradle:0.14.4dan buildToolsVersion "21.1.1".
Kamil Lelonek

32
Karya ini, namun jawabannya melakukan menyedihkan pekerjaan yang tidak memadai menjelaskan bahwa setiap subfolder yang Anda tambahkan kebutuhan untuk memiliki kedua dalam subfolder dari itu, yang hanya dapat disebut "tata letak", dan semua file tata letak Anda perlu masuk ke dalam satu subfolder kedua . Membaca lusinan komentar untuk mencari tahu itu jauh dari ideal. Dan bagi siapa pun yang masih mencari, menyiapkan subfolder "tata letak" tambahan adalah solusi untuk URI is not registeredmasalah tersebut.
aroth

233

Jawabannya adalah tidak.

Saya ingin menarik perhatian Anda terhadap buku ini Pro Android 2 yang menyatakan:

Perlu juga dicatat beberapa kendala terkait sumber daya. Pertama, Android hanya mendukung daftar file linear dalam folder yang telah ditentukan di bawah resolusi. Misalnya, itu tidak mendukung folder bersarang di bawah folder layout (atau folder lain di bawah res).

Kedua, ada beberapa kesamaan antara folder aset dan folder mentah di bawah res. Kedua folder dapat berisi file mentah, tetapi file dalam mentah dianggap sumber daya dan file dalam aset tidak.

Perhatikan bahwa karena isi folder aset tidak dianggap sumber daya, Anda dapat menempatkan hierarki folder dan file yang sewenang - wenang di dalamnya.


3
Saya tamu harapan terbaik kami berikutnya akan menjadi plugin Eclipse atau IntelliJ yang bisa menutup file berdasarkan awalan nama file.
Jerry Brady

15
@ Justin memeriksa solusi yang saya posting untuk kelas.
eski

Saya kira salah satu solusinya adalah memberi nama file yang Anda inginkan dikategorikan, jadi sepertinya ada di subfolder. Saya menambahkan "tag subfolder" ke awal nama. Sebagai contoh. semua aktivitas akan menjadi "activity_activityname.xml" dan aktivitas anak dapat menjadi "activity_activityname_childactivity.xml" dan seterusnya. File lainnya adalah "other_filename.xml". Itulah yang saya lakukan untuk menghindari kebingungan. Sial, seseorang mengalahkan saya untuk itu. Tiga tahun>. <Buruk saya, belum melihat itu.
Vedavyas Bhat

1
Penting untuk dicatat di sini bahwa dengan mempertimbangkan rawsebagai sumber daya Anda mendapatkan striping kepadatan / orientasi / versi / dll, sementara assetsAnda harus melakukannya secara manual.
TWiStErRob

1
Pilih jawaban ini sebagai argumen untuk menentang arus utama Android.
Zon

77

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.

  1. Salin semua file XML dari direktori layout Anda, dan masukkan ke direktori di desktop atau sesuatu untuk cadangan.
  2. Hapus seluruh direktori tata letak (Pastikan Anda mencadangkan semuanya dari langkah 1 !!!)
  3. Klik kanan direktori res dan pilih> direktori baru.
  4. Beri nama direktori ini "layout". (Ini bisa berupa apa pun yang Anda inginkan, tetapi itu bukan direktori 'fragmen' atau direktori 'aktivitas', yang muncul kemudian).
  5. Klik kanan direktori "tata letak" baru dan pilih direktori> baru. (Ini akan menjadi nama jenis file XML yang akan Anda miliki di dalamnya, misalnya, 'fragmen' dan 'kegiatan').
  6. Klik kanan direktori 'fragmen' atau 'kegiatan' (Catatan: ini tidak harus menjadi 'fragmen' atau 'kegiatan' seperti yang saya gunakan sebagai contoh) dan pilih direktori> baru sekali lagi dan beri nama direktori ini "tata letak". (Catatan: Ini HARUS dinamai 'tata letak' !!! sangat penting).
  7. Masukkan file XML yang Anda inginkan di dalam direktori 'layout' baru dari cadangan yang Anda buat di desktop Anda.
  8. Ulangi langkah 5 - 7 untuk direktori kustom sebanyak yang Anda inginkan.
  9. 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).

    sourceSets {
        main {
            res.srcDirs =
                    [
                            'src/main/res/layouts/activities',
                            'src/main/res/layouts/fragments',
                            'src/main/res/layouts/content',
                            'src/main/res/layouts',
                            'src/main/res'
                    ]
        }
    }
  10. 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.

Struktur Direktori


1
Bagaimana dengan tata letak direktori seperti layout-v21?
Akshay Chordiya

4
Saya belum mengujinya, tapi saya akan membayangkan Anda hanya membuat folder layout-v21 di samping folder layout.
hitch.united

Bekerja pada gradle 2.0.0 dan buildToolsVersion 23.0.2! Perhatikan bahwa nilai konfigurasi adalah 'src/main/res/layouts/content'dan jalur konfigurasi ini adalah'src/main/res/layouts/content/layout'
cwhsu

3
Saya mengalami masalah dengan stackoverflow.com/questions/41934004/…
Petra Barus

2
Dicari untuk sementara tanpa hasil, ini adalah satu-satunya solusi yang bekerja untuk saya. Terima kasih telah memposting jawaban terperinci dengan gambar!
Machine Tribe

53

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":

buying_bought_tracks.xml
buying_buy_tracks.xml
playing_edit_playlist.xml
playing_play_playlist.xml
playing_show_playlists.xml

20

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:

Android Studio -> File -> Pengaturan -> Plugin.

Mac:

Android Studio -> Android Studio Tab (Kiri Atas) -> Preferences -> Plugins -> Install JetBrains Plugin ..

Untuk Mac, saya bisa mengujinya dan tidak dapat mencari plugin. Jadi saya mengunduh plugin dari sini dan menggunakan Install plugin from diskopsi dari pengaturan di atas.


Juga bagikan tautan plugin itu!
Paresh Mayani

Selesai Bagaimanapun Anda selalu dapat mencari "Pengelompokan File Android" di Android Studio -> File -> Settings -> Plugins
Sharpe

3
plugin tidak berfungsi pada tampilan "Android", hanya tampilan "Project": /
Hugo Gresse

18

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:

sourceSets {
    main {
        res.srcDirs = ['src/main/res', 'src/main/res2']
    }
}

Periksa dokumentasinya .


2
Saya perhatikan bahwa setiap kali saya membuat perubahan pada tata letak di bawah pengaturan ini, saya selalu harus melakukan cleanuntuk melihatnya tercermin pada aplikasi.
Pawan Kumar

16

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.


16

Masalah kecil

Saya dapat mencapai subfolder dengan mengikuti jawaban teratas untuk pertanyaan ini.

Namun, ketika proyek bertambah besar, Anda akan memiliki banyak sub-folder:

sourceSets {
    main {
        res.srcDirs =
            [
                    'src/main/res/layouts/somethingA',
                    'src/main/res/layouts/somethingB',
                    'src/main/res/layouts/somethingC',
                    'src/main/res/layouts/somethingD',
                    'src/main/res/layouts/somethingE',
                    'src/main/res/layouts/somethingF',
                    'src/main/res/layouts/somethingG',
                    'src/main/res/layouts/somethingH',
                    'src/main/res/layouts/...many more',
                    'src/main/res'
            ]
    }
}

Bukan masalah besar, tapi:

  • itu tidak cantik karena daftarnya menjadi sangat panjang.
  • Anda harus mengubah app/build.gradlesetiap kali Anda menambahkan folder baru.

Perbaikan

Jadi saya menulis metode Groovy sederhana untuk mengambil semua folder bersarang:

def getLayoutList(path) {
    File file = new File(path)
    def throwAway = file.path.split("/")[0]
    def newPath = file.path.substring(throwAway.length() + 1)
    def array = file.list().collect {
        "${newPath}/${it}"
    }
    array.push("src/main/res");
    return array
}

Rekatkan metode ini di luar android {...}blok di app/build.gradle.


Cara Penggunaan

Untuk struktur seperti ini:

<project root>
├── app <---------- TAKE NOTE
├── build
├── build.gradle
├── gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle

Gunakan seperti ini:

android {
    sourceSets {
        main {
            res.srcDirs = getLayoutList("app/src/main/res/layouts/")
        }
    }
}

Jika Anda memiliki struktur seperti ini:

<project root>
├── my_special_app_name <---------- TAKE NOTE
├── build
├── build.gradle
├── gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle

Anda akan menggunakannya seperti ini:

android {
    sourceSets {
        main {
            res.srcDirs = getLayoutList("my_special_app_name/src/main/res/layouts/")
        }
    }
}

Penjelasan

getLayoutList()mengambil a relative pathsebagai argumen. Ini relative pathrelatif 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:

            [
                    'src/main/res/layouts/somethingA',
                    'src/main/res/layouts/somethingB',
                    'src/main/res/layouts/somethingC',
                    'src/main/res/layouts/somethingD',
                    'src/main/res/layouts/somethingE',
                    'src/main/res/layouts/somethingF',
                    'src/main/res/layouts/somethingG',
                    'src/main/res/layouts/somethingH',
                    'src/main/res/layouts/...many more',
                    'src/main/res'
            ]

Berikut naskah dengan komentar untuk dipahami:

def getLayoutList(path) {
    // let's say path = "app/src/main/res/layouts/
    File file = new File(path)

    def throwAway = file.path.split("/")[0]
    // throwAway = 'app'

    def newPath = file.path.substring(throwAway.length() + 1) // +1 is for '/'
    // newPath = src/main/res/layouts/

    def array = file.list().collect {
        // println "filename: ${it}" // uncomment for debugging
        "${newPath}/${it}"
    }

    array.push("src/main/res");
    // println "result: ${array}" // uncomment for debugging

    return array
}

Semoga ini bisa membantu!


Saya menggunakan pendekatan Anda tetapi bagaimana menggunakannya dalam aktivitas? saya membuat subfolder di folder layout bernama admin dan memiliki layout admin_home ketika saya sedang beraktifitas dan menggunakan setContentView(R.layout.Admin.admin_home .)Admin.admin_home tidak terselesaikan
Asmaa Rashad

Anda harus dapat menggunakannya secara normal, seperti R.layout.admin_home. Skrip harus dapat mengambil nama untuk Anda secara otomatis. Beri tahu saya jika Anda dapat membuatnya berfungsi.
Saya naga katak

bekerja dengan baik tapi setelah mengubah baris ini array.push("src/main/res");untuk def 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
Asmaa Rashad

1
Layout di subfolder tidak dapat menyelesaikan namespace android. Ada ide?
Jaguar

Bisakah Anda menghapus tanda komentar pada baris tersebut // uncomment for debuggingdan kemudian memeriksa apakah output src/main/res/layouts/<your_layout_files>terdeteksi dengan benar?
Saya naga katak

15

Sekarang kita dapat dengan mudah melakukannya dengan plugin JetBrains yang disebut " Pengelompokan File Android "

lihat tautan ini

Pengelompokan File Android

masukkan deskripsi gambar di sini


Harus ditandai sebagai jawaban yang benar, karena hanya mengatur pengelompokan dengan konvensi nama sederhana. Tidak perlu mengubah gradle, atau bahkan struktur direktori default suatu aplikasi. Semua tata letak masih ada di folder tata letak tetapi dikelompokkan dalamAndroid Studio
Alireza Fattahi

1
Seharusnya bukan jawaban yang diterima karena itu tidak berfungsi dalam tampilan Android .... (tapi saya suka ide ^^)
Appyx

Ini tidak berfungsi untuk Android versi terakhir terakhir ... apakah ada versi yang diperbarui?
user3053247

7

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

android {
    //other stuff

    sourceSets {
        main.res.srcDirs = ['src/main/res', file('src/main/layouts').listFiles()]
    }
}

contoh struktur folder

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/ valuesetc 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).


4

Periksa skrip Bash Flatten Folder yang mengubah hierarki folder menjadi satu folder


Akan segera memeriksanya. Terima kasih
Paresh Mayani

1
Script itu menempatkan perubahan nama file untuk memasukkan hierarki direktori dalam nama file. Bagaimana itu akan bekerja dengan IDE Android Anda dengan nama file berubah di semua tempat?
Stealth Rabbi

3

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

Di PATH_TO_YOUR_FILE

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 mklinkperintah 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.


1
Menempatkan symlink dalam mengalahkan tujuan ingin modularisasi penyimpanan dengan memisahkan komponen ke dalam subdirektori yang berbeda: secara efektif membuatnya lebih kompleks, bukan lebih sedikit. Gradle memungkinkan spesifikasi direktori sumber daya tambahan.
RichieHH

3

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.


Saya setuju dengan Anda bahwa AS tidak mencatat perubahan dalam file XML. Tapi apa solusinya? Saya akan mencoba stackoverflow.com/questions/32317822/… .
CoolMind

3

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 androidblok file gradle tingkat proyek) :

sourceSets.each {
    def rootResDir = it.res.srcDirs[0]
    def getSubDirs = { dirName ->
        def layoutsDir = new File(rootResDir, dirName)
        def subLayoutDirs = []
        if (layoutsDir.exists()) {
            layoutsDir.eachDir {
                subLayoutDirs.add it
            }
        }
        return subLayoutDirs
    }
    def resDirs = [
            "anims",
            "colors",
            "drawables",
            "drawables-hdpi",
            "drawables-mdpi",
            "drawables-xhdpi",
            "drawables-xxhdpi",
            "layouts",
            "valuess",
    ]
    def srcDirs = resDirs.collect {
        getSubDirs(it)
    }
    it.res.srcDirs = [srcDirs, rootResDir]
}

Bagaimana melakukan dalam praktek?

Sebagai contoh, saya ingin membuat subfolder bernama activityuntuk layout, menambahkan string dengan nama apa pun dalam resDirsvariabel seperti layouts, maka file layout xml harus dimasukkan ke dalamres\layouts\activity\layout\xxx.xml .

Jika saya ingin membuat subfolder bernama selectorsuntuk drawable, tambahkan string dengan nama apa pun dalam resDirsvariabel seperti drawables, maka file xml yang dapat ditarik harus dimasukkan res\drawables\selectors\drawable\xxx.xml.

Nama folder seperti layoutsdan drawablesdidefinisikan dalam resDirsvariabel, bisa berupa string apa saja. Semua subfolder yang dibuat oleh Anda seperti activityatau selectorsdianggap sama dengan resfolder. Jadi masukselectors folder, kita harus membuat drawablefolder tambahan dan meletakkan file xml di drawablefolder, setelah itu gradle dapat mengenali file xml sebagai gambar normal.


Yang ini harus dianggap sebagai jawaban yang benar! Sederhana dan bekerja dengan sempurna!
Gláucio Leonardo Sant'ana

2

Jika Anda menggunakan metode ini dalam jawaban yang disetujui, dan ingin sedikit meningkatkannya, maka ubah pengaturan gradle seperti ini:

    sourceSets {
    main {
        res.srcDirs = [
            file("src/main/res/layouts/").listFiles(),
            "src/main/res/layouts",
            "src/main/res"
        ]
    }
}

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.


1
  • Langkah 1: Klik kanan pada layout - tampilkan di explorer
  • Langkah 2: Buka folder layout dan buat langsung subfolder: layout_1, layout_2 ...
  • Langkah 3: buka layout_1 buat tata letak folder (catatan: nama wajib adalah tata letak), buka folder_ tata letak buat subdirektori tata letak (catatan: nama wajib adalah tata letak) ...
  • Langkah 4: Salin file xml ke subdirektori tata letak di layout_1 dan layout_2
  • Langkah 5: Jalankan kode di buid.grade (aplikasi modul) dan tekan sinkronisasi sekarang:

sourceSets {
    main {
        res.srcDirs =
            [
                'src / main / res / layout / layout_1'
                'src / main / res / layout / layout_2',
                'src / main / res'
            ]
    }
}
  • Langkah 6: Ringkasan: Semua langkah di atas hanya akan membantu pengelompokan folder dan ditampilkan dalam mode 'proyek', sedangkan mode 'android' akan ditampilkan seperti biasa.
  • Jadi saya menggambar bahwa mungkin penamaan awalan sama efektifnya dengan folder pengelompokan.

Terima kasih untuk Projectmode. Saya tidak bisa mengerti di mana subfolder menghilang (dalam Androidmode).
CoolMind

0

Jawaban singkatnya adalah tidak. Tetapi Anda pasti dapat memiliki beberapa resfolder. Saya pikir, sedekat mungkin dengan subfolder untuk layoutfolder tersebut. Begini caranya.


1
Periksa jawaban yang diterima. Saya belum mencobanya secara pribadi tetapi jika Anda dapat memeriksa dan memperbarui maka akan sangat membantu!
Paresh Mayani

0

Jawaban teratas memiliki beberapa kelemahan: Anda harus menambahkan jalur tata letak baru, AS menempatkan sumber daya baru ke res\layoutsfolder alih-alihres\values .

Menggabungkan beberapa jawaban yang saya tulis serupa:

sourceSets {
    main {
        res.srcDirs =
                [
                        'src/main/res',
                        file("src/main/res/layouts/").listFiles(),
                        'src/main/res/layouts'
                ]
    }
}

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 ids (referensi ke file XML lain). Sering kali diperlukan untuk menekan Build > Clean Projectatau Build > Rebuild Project. BacaDiperlukan Rebuild setelah mengubah file tata letak xml di Android Studio .


Komentar Anda 'Saya membuat folder dengan artikel ini (tautan terlampir)' bukan cara yang dapat diterima untuk memberikan solusi di sini di SO Jawaban Anda tidak jelas. Anda dapat meninggalkan instruksi dan memuji penulis dengan tautan. Kalau tidak, ini hanya malas.
jungledev

@jungledev, yah, akhirnya saya menolak ide ini dan kembali ke resfolder 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?
CoolMind

Maksud saya persis apa yang saya katakan. Jangan katakan 'Saya melakukannya dengan tutorial ini .... (masukkan tautan).' Apa yang harus Anda katakan adalah: "Saya mengikuti tutorial ini (masukkan tautan) dan berikut adalah langkah-langkah yang berhasil bagi saya. Langkah 1, Langkah 2, Langkah 3 ... dll 'Anda harus memasukkan langkah-langkah DI SINI dalam jawabannya. Cukup menautkan ke tutorial tidak dapat diterima.
jungledev

0

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:

    sourceSets {
        main.res.srcDirs += ['src/main/java/XYZ/ABC']
    }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.