You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移至新版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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:16:08