迁移至新版Android SDK/AndroidX后自定义属性无法解析求助
修复自定义属性引用错误的解决方案
我之前迁移旧项目到新版Android SDK和AndroidX时也碰到过类似的问题,结合你的描述,这大概率是新版构建工具对自定义属性引用规则的变化导致的,给你几个具体的排查和修复步骤:
1. 移除样式中自定义属性的包名前缀
新版Gradle和Android Studio不再需要在样式文件里给自定义属性加上完整的包名前缀了,旧版的写法虽然能运行,但新版构建工具会把它识别为无效符号。直接修改你的style_warm.xml:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="style_display_page_title_warm"> <item name="pageStripFont">fonts/b_titr.ttf</item> <!-- 删掉my.app.package:前缀 --> <item name="android:textSize">25dp</item> <item name="android:textColor">@color/colorDisplayPageTitle</item> </style> </resources>
2. 确认自定义属性的定义正确性
- 检查
res/values/attr.xml的位置是否正确,确保它在默认的values目录下,没有被放到values-vXX这类版本限定目录里,否则编译时可能无法全局识别。 - 核对
attr的名称拼写,pageStripFont在attr.xml和样式文件里的大小写、拼写必须完全一致,Android资源是大小写敏感的。
3. 清理项目缓存并重建
迁移后缓存问题很常见,先执行这两步操作:
- 点击Android Studio顶部菜单栏的
Build > Clean Project - 然后选择
Build > Rebuild Project
这一步能清除旧的构建缓存,让新的属性引用规则生效。
4. 检查Gradle配置与AndroidX适配
- 确保Module级
build.gradle里的compileSdkVersion和targetSdkVersion使用的是最新稳定版(比如34),旧版本的构建工具可能存在兼容性问题。 - 确认所有依赖都已经完全迁移到AndroidX,没有残留的
android.support.*类引用,如果你的EVETextViewPlus继承自旧的TextView,建议改成继承AppCompatTextView以适配AndroidX。
5. 验证自定义View的属性获取逻辑
打开EVETextViewPlus的代码,检查获取pageStripFont属性的逻辑是否正确,比如:
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.EVETextViewPlus); String pageStripFont = typedArray.getString(R.styleable.EVETextViewPlus_pageStripFont); typedArray.recycle();
确保这里引用的R.styleable是正确的,没有因为AndroidX迁移导致的R类冲突。
如果以上步骤都试过还是不行,可以尝试把attr.xml里的属性单独声明(脱离declare-styleable),不过这种情况比较少见,主要还是前面的命名空间和缓存问题。
内容的提问来源于stack exchange,提问作者VSB
相关产品推荐
相关产品推荐

