Android中如何像mipmap文件夹一样在res/drawable内创建子文件夹?
其实Android原生的资源打包系统(aapt)并不支持在drawable这类标准资源目录下创建子文件夹哦——因为它只会识别res目录下的一级标准目录(比如drawable、layout、values),子文件夹里的资源不仅不会被打包进APK,还没法通过R类引用,等于白放。
不过别担心,有几个实用的替代方案能帮你实现类似的分类管理需求:
用命名前缀做逻辑分类
这是最省心的办法,给不同类型的资源加统一前缀,比如图片资源都加img_前缀,矢量图加vec_前缀:img_logo.png、img_background.png、vec_button_shade.xml、vec_profile_shade.xml。这样在Android Studio里搜索前缀就能快速定位,排序后也能自动归为一组,管理起来很方便。自定义资源目录+Gradle配置(推荐)
如果你一定要物理上分开文件夹,可以在res目录下创建自定义的一级目录,比如drawable_images和drawable_vectors,然后在模块的build.gradle文件里配置sourceSets,把这些目录加入资源集合:android { sourceSets { main { res.srcDirs = [ 'src/main/res', 'src/main/res/drawable_images', 'src/main/res/drawable_vectors' ] } } }配置后,aapt会把这些目录里的资源当成普通
drawable资源处理,你依然可以用R.drawable.logo、R.drawable.button_shade这样的方式引用,同时物理上的分类也清晰了。用Assets目录管理(适合特殊场景)
如果你的资源不需要在布局或代码里通过R类引用,而是需要动态加载,可以把它们放在assets目录下的子文件夹里(比如assets/images/、assets/vectors/)。不过这种方式需要用AssetManager手动加载资源,没法直接在XML布局里用@drawable引用,适合一些非UI核心的资源场景。
总的来说,第二种方案既满足了物理分类的需求,又不影响资源的正常引用,是大型项目里最常用的做法。
内容的提问来源于stack exchange,提问作者Dinesh Kumar Yadav

