error: Error: No resource found that matches the given name (for attribute reference)
error: Error: No resource found that matches the given name (for attribute reference)
我的 account_particle.xml 布局中有这一行
android:padding="?attrs/disc_padding"
这个attrs.xml:
<resources>
<declare-styleable name="AccountParticle">
<attr name="apStyle" format="enum">
<enum name="header" value="0"/>
<enum name="list_item" value="1"/>
</attr>
<attr name="text_margin_start" format="reference"/>
<attr name="text_margin_end" format="reference"/>
<attr name="text_margin_right" format="reference"/>
<attr name="text_margin_left" format="reference"/>
<attr name="disc_padding" format="reference"/>
<attr name="disc_imageViewSize" format="reference"/>
</declare-styleable>
</resources>
和这个 styles.xml:
<style name="Theme.ap.header" parent="Theme.AppCompat">
<item name="disc_padding">@dimen/account_menu_header_signed_in_avatar_margin_start</item>
</style>
<style name="Theme.ap.list_item" parent="Theme.AppCompat">
<item name="disc_padding">@dimen/account_menu_account_list_item_avatar_margin_start</item>
</style>
为什么会出现这个编译错误?
error: Error: No resource found that matches the given name (at 'padding' with value '?attrs/disc_padding').
AccountParticle
问题与属性用法有关,它应该是 ?attr/
而不是 ?attrs/
。
但是您的 attrs.xml
文件中还有另一个问题。问题是您在 declare-styleable
:
中声明了以下引用
<attr name="text_margin_start" format="reference"/>
<attr name="text_margin_end" format="reference"/>
<attr name="text_margin_right" format="reference"/>
<attr name="text_margin_left" format="reference"/>
<attr name="disc_padding" format="reference"/>
<attr name="disc_imageViewSize" format="reference"/>
此引用应移至 declare-styleable
之外
为什么
declare-styleable
用于定义将在自定义视图上下文中使用的一组 attrs
。在您的情况下,disc_padding
在 AccountParticle
.
的上下文之外使用
文档参考:https://developer.android.com/training/custom-views/create-view#customattr
在布局属性中引用主题属性值的正确语法是:
prefix:attribute="?attr/themeAttribute"
即attr
而不是attrs
。
虽然您可能已经在名为 attrs.xml
的文件中定义了该属性,但文件名实际上是无关紧要的。构建资源时,将处理 res/values*/
文件夹下的每个文件,无论文件名如何。
这实际上意味着您可以在那里随意命名文件,并且可以将任何资源放在您想要的任何文件中。它们都会根据它们的类型进行处理,如<attr>
、<color>
、<string>
等
我的 account_particle.xml 布局中有这一行
android:padding="?attrs/disc_padding"
这个attrs.xml:
<resources>
<declare-styleable name="AccountParticle">
<attr name="apStyle" format="enum">
<enum name="header" value="0"/>
<enum name="list_item" value="1"/>
</attr>
<attr name="text_margin_start" format="reference"/>
<attr name="text_margin_end" format="reference"/>
<attr name="text_margin_right" format="reference"/>
<attr name="text_margin_left" format="reference"/>
<attr name="disc_padding" format="reference"/>
<attr name="disc_imageViewSize" format="reference"/>
</declare-styleable>
</resources>
和这个 styles.xml:
<style name="Theme.ap.header" parent="Theme.AppCompat">
<item name="disc_padding">@dimen/account_menu_header_signed_in_avatar_margin_start</item>
</style>
<style name="Theme.ap.list_item" parent="Theme.AppCompat">
<item name="disc_padding">@dimen/account_menu_account_list_item_avatar_margin_start</item>
</style>
为什么会出现这个编译错误?
error: Error: No resource found that matches the given name (at 'padding' with value '?attrs/disc_padding').
AccountParticle
问题与属性用法有关,它应该是 ?attr/
而不是 ?attrs/
。
但是您的 attrs.xml
文件中还有另一个问题。问题是您在 declare-styleable
:
<attr name="text_margin_start" format="reference"/>
<attr name="text_margin_end" format="reference"/>
<attr name="text_margin_right" format="reference"/>
<attr name="text_margin_left" format="reference"/>
<attr name="disc_padding" format="reference"/>
<attr name="disc_imageViewSize" format="reference"/>
此引用应移至 declare-styleable
为什么
declare-styleable
用于定义将在自定义视图上下文中使用的一组 attrs
。在您的情况下,disc_padding
在 AccountParticle
.
文档参考:https://developer.android.com/training/custom-views/create-view#customattr
在布局属性中引用主题属性值的正确语法是:
prefix:attribute="?attr/themeAttribute"
即attr
而不是attrs
。
虽然您可能已经在名为 attrs.xml
的文件中定义了该属性,但文件名实际上是无关紧要的。构建资源时,将处理 res/values*/
文件夹下的每个文件,无论文件名如何。
这实际上意味着您可以在那里随意命名文件,并且可以将任何资源放在您想要的任何文件中。它们都会根据它们的类型进行处理,如<attr>
、<color>
、<string>
等