跨包调用Style资源报错:如何通过代码使用其他包的Style?
跨包引用Style的问题及解决方案
直接通过R.style.style_from_different_package跨包调用Style会报symbol not found错误,原因是每个Android模块(包)的R类是独立编译生成的,其他模块无法直接访问非自身模块R类中的资源ID。以下是可行的解决方法:
将Style所在模块设为依赖库
如果你的Style定义在一个独立的Android Library模块中,先在需要引用的模块的build.gradle(Module级)里添加该库的依赖:dependencies { implementation project(':your-style-module-name') }依赖完成后,引用时必须指定Style所在模块的完整包名,比如:
textView.setTextAppearance(com.your.style.module.package.R.style.style_from_different_package);迁移Style到公共资源目录
若两个模块同属一个项目,可以把通用Style移到项目的公共资源模块(或主模块的res/values目录),这样所有模块都能直接通过R.style.style_from_different_package引用,无需额外处理。动态获取资源ID(不推荐)
可以通过getResources().getIdentifier()动态查找Style的ID,避免直接依赖模块,但这种方式维护性差,资源名或包名变更时容易出错:int styleResId = getResources().getIdentifier( "style_from_different_package", "style", "com.your.style.package" ); if (styleResId != 0) { textView.setTextAppearance(styleResId); }
内容的提问来源于stack exchange,提问作者Debesh Mohanty
相关产品推荐
相关产品推荐

