结论:a:attr不是合法写法,正确形式是?attr/xxx或?android:attr/xxx;前者引用主题中定义的属性值,后者引用系统内置属性,均需通过?前缀实现主题感知动态解析,@attr/等写法非法。
直接说结论:a:attr 不是合法的 Android XML 资源引用语法,?attr 才
是标准写法;所谓 “a:attr” 很可能是误写、拼写错误或混淆了命名空间前缀(比如自定义命名空间中的 app:xxx)。
以 ?attr/xxx 或简写为 ?xxx 的形式出现,表示从当前 Theme 中查找名为 xxx 的属性值。这个值不是固定资源,而是由当前主题动态决定的。
attrs.xml 中声明的属性(如 )themes.xml(或 styles.xml 中的 Theme)里为该 attr 赋具体值,例如:- @color/purple_500
android:textColor="?colorAccent"),可省略 attr/
以 ?android:attr/xxx 形式,指向 Android 框架层预定义的属性,这些属性存在于系统主题中(如 Theme.Holo, Theme.Material)。
?android:attr/textColorSecondary 获取系统二级文字色?android:attr/xxx 在低版本不可用,建议查对应 API level 的 attrs.xml 源码确认Android 不支持 @attr/xxx 或 @android:attr/xxx 这类写法:
@ 开头表示“直接引用已编译的资源 ID”,而 attr 是抽象属性名,不是具体资源,不能被 @ 直接解析?attr/xxx(应用内属性)、?android:attr/xxx(系统属性)@style/xxx 或 @android:style/xxx,那是引用完整 style,和 attr 无关有人把 app:xxx 命名空间误认为 “a:attr”,其实:
app: 是自定义命名空间(通常在 layout 根标签声明:xmlns:app="http://schemas.android.com/apk/res-auto")app:strokeWidth="2dp"),这些属性定义在 attrs.xml 中,但调用时不加 ?,也不属于主题属性引用机制?attr/ 完全不同维度:一个是 XML 属性传递,一个是主题值注入