现在,我在'res/layout'文件夹内存储每个XML布局文件,因此管理小型项目是可行和简单的,但当有大型和繁重的项目的情况下,那么应该有一个层次结构和子文件夹内需要的布局文件夹。

如。

layout
-- layout_personal
   -- personal_detail.xml
   -- personal_other.xml
--layout_address
  -- address1.xml
  -- address2.xml

同样,我们希望大型应用程序有子文件夹,那么在Android项目中有办法做到这一点吗?

我能够在布局文件夹内创建layout-personal和layout_address子文件夹,但当需要使用R.layout访问XML布局文件时。_______,当时在菜单中没有任何XML布局弹出。


当前回答

如果你在批准的答案中使用了这个方法,并且想要稍微改进一下,那么就像这样更改gradle设置:

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

因此,如果你添加更多的文件夹和布局,你不需要回到这里,并附加一个很长的源文件夹列表,让gradle为你获取所有的文件夹。

其他回答

现在有了Android Studio和Gradle,你可以在你的项目中有多个资源文件夹。允许组织不仅你的布局文件,但任何类型的资源。

它不是一个确切的子文件夹,但可以分离应用程序的部分。

配置如下:

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

检查文档。

如果你在批准的答案中使用了这个方法,并且想要稍微改进一下,那么就像这样更改gradle设置:

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

因此,如果你添加更多的文件夹和布局,你不需要回到这里,并附加一个很长的源文件夹列表,让gradle为你获取所有的文件夹。

答案是否定的。

我想提请您注意这本书Pro Android 2,它指出:

It is also worth noting a few constraints regarding resources. First, Android supports only a linear list of files within the predefined folders under res. For example, it does not support nested folders under the layout folder (or the other folders under res). Second, there are some similarities between the assets folder and the raw folder under res. Both folders can contain raw files, but the files within raw are considered resources and the files within assets are not. Note that because the contents of the assets folder are not considered resources, you can put an arbitrary hierarchy of folders and files within it.

在一个模块中,要拥有风味、风味资源(布局、值)和风味资源的组合,主要要记住两件事:

When adding resource directories in res.srcDirs for flavor, keep in mind that in other modules and even in src/main/res of the same module, resource directories are also added. Hence, the importance of using an add-on assignment (+=) so as not to overwrite all existing resources with the new assignment. The path that is declared as an element of the array is the one that contains the resource types, that is, the resource types are all the subdirectories that a res folder contains normally such as color, drawable, layout, values, etc. The name of the res folder can be changed.

一个例子是使用路径"src/flavor/res/values/strings-ES",但是注意到实践层次结构必须有子目录值:

├── module 
   ├── flavor
      ├── res
         ├── values
            ├── strings-ES
               ├── values
                  ├── strings.xml
               ├── strings.xml
 

该框架精确地根据类型识别资源,这就是为什么通常已知的子目录不能被省略。

还要记住,flavor中的所有strings.xml文件将形成一个联合,这样资源就不能被复制。反过来,这个组成该类型文件的联合在模块的主文件之前具有更高的优先级。

flavor {
        res.srcDirs += [
            "src/flavor/res/values/strings-ES"
        ]
}

将strings-ES目录视为包含资源类型的定制资源。

GL

如果你是在linux或mac上开发,一种变通方法是,创建包含符号链接到布局文件的子文件夹。只需使用ln命令和-s

ln -s PATH_TO_YOUR_FILE

问题是,你的布局文件夹仍然包含所有的.xml文件。但是你可以通过使用子文件夹来选择它们。这是最接近你想要的东西。

我刚读到,如果你使用的是Vista或更高版本,这可能也适用于Windows。这里有一个mklink命令。只是谷歌,我从来没用过。

另一个问题是,如果你已经打开了文件,并试图再次打开它,插件抛出一个空指针异常。但它并没有挂断。