Ошибка: Ошибка: не найден ресурс, соответствующий заданному имени (для справки по атрибуту)

У меня есть эта строка в моем макете 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

Опечатка. На s нет attr. То есть должен быть android:padding = "?attr/disc_padding".

Mike M. 18.11.2018 10:14

но это на attrs.xml

Elad Benda 18.11.2018 10:40

Это просто имя файла. Фактический ресурс будет создан в классе R.attr. Фактически, не имеет значения, как вы назовете какой-либо файл в папках res/values*/ или в какой файл вы поместите туда какие-либо ресурсы; все они обрабатываются в соответствии со своим типом, например <attr>.

Mike M. 18.11.2018 10:43

можешь написать это как ответ?

Elad Benda 18.11.2018 10:49

Конечно, я могу вставить это в ответ. Поскольку вы рассчитывали, что это будет attrs, это не просто опечатка. Дай мне минутку. Спасибо!

Mike M. 18.11.2018 10:55
1
5
218
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проблема связана с использованием атрибутов, это должен быть ?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

спасибо, но я имел в виду, что макет account_particle.xml

Elad Benda 18.11.2018 09:56
Ответ принят как подходящий

Правильный синтаксис для ссылки на значение атрибута темы в атрибуте макета:

prefix:attribute = "?attr/themeAttribute"

То есть attr вместо attrs.

Хотя вы могли определить этот атрибут в файле с именем attrs.xml, имя файла на самом деле не имеет значения. При создании ресурсов обрабатывается каждый файл в папке res/values*/, независимо от имени файла.

Фактически это означает, что вы можете называть свои файлы там как хотите, и вы можете помещать туда любые ресурсы в любой файл, какой захотите. Все они будут обрабатываться в соответствии со своим типом, например <attr>, <color>, <string> и т. д.

Другие вопросы по теме