Android Studio 3.2 Canary版本布局子文件夹无法显示求助
我刚用2018年Google I/O大会发布的Android Studio 3.2 Canary最新版本创建了项目,为了规整布局文件,将它们放在src/main/res/layout/下的activities、fragments、listitem子文件夹中,同时在Gradle里配置了如下sourceSets:
sourceSets { main { res.srcDirs = [ 'src/main/res/layout/activities', 'src/main/res/layout/fragments', 'src/main/res/layout/listitem', 'src/main/res/layout', 'src/main/res' ] } }
但目前遇到的问题是:无论是在Project视图,还是Android视图的Project标签中,都看不到这些布局子文件夹。我已附上相关截图(Project视图截图、Android视图截图、Android视图面包屑截图),想请教这是Android Studio的Bug,还是相关配置属性发生了变更?
首先可以明确:这不是Bug,而是Android Studio资源视图的设计逻辑导致的,同时你的Gradle配置也有可优化的地方。
问题原因拆解
Android Studio视图的资源聚合逻辑
Android Studio的Android视图(包括其下的Project标签)是按照Android标准资源结构展示的,它会自动把所有布局文件合并到Layout节点下展示,不管这些文件实际存储在磁盘的子文件夹中。而默认的Project视图如果是"Android"模式,也会遵循这个聚合逻辑;只有切换到"Project Files"模式,才能看到磁盘上真实的文件夹层级。Gradle配置的顺序问题
你当前的res.srcDirs配置顺序存在隐患,应该把最基础的src/main/res放在最前面,再依次添加子文件夹,避免资源优先级错乱。调整后的正确配置如下:
sourceSets { main { res.srcDirs = [ 'src/main/res', 'src/main/res/layout', 'src/main/res/layout/activities', 'src/main/res/layout/fragments', 'src/main/res/layout/listitem' ] } }
不过要注意:即使配置正确,Android Studio的Android视图依然不会显示这些子文件夹,它只会聚合展示所有布局文件。
查看真实子文件夹结构的方法
如果想确认这些子文件夹确实存在且布局文件都在其中,可以通过以下方式:
- 在Project视图的模式下拉菜单中选择Project Files,就能看到磁盘上真实的文件夹层级。
- 直接打开项目所在的本地磁盘目录,查看实际的文件结构。
额外说明
其实Android官方并不推荐在layout文件夹下创建子文件夹,因为编译时资源系统会将所有布局文件扁平化处理,子文件夹不会影响编译结果,仅用于本地文件管理。Android Studio的视图设计正是基于这个逻辑,所以才会合并展示布局文件。
内容的提问来源于stack exchange,提问作者Wasim K. Memon

