ошибка: ошибка: не найден ресурс, соответствующий данному имени (для ссылки на атрибут) - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть эта строка в макете account_particle.xml

            android:padding="?attrs/disc_padding"

this 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

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

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

prefix:attribute="?attr/themeAttribute"

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

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

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

0 голосов
/ 18 ноября 2018

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

...