R.styleable не может быть решена, почему?

У меня есть файл resources.xml, расположенный под значениями direcotry /, вот

/values/resources.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="TheMissingTabWidget"> 
        <attr name="android:divider" /> 
    </declare-styleable> 
</resources>

В моем коде Java, когда я пытаюсь получить доступ к этому ресурсу R.styleable.TheMissingTabWidget Затмение жалуется, что стиль не может быть решен или не является полем. Зачем? Почему я не могу получить доступ к этому ресурсу? (Я использую Android 2.1-обновление).

8 ответов

Плз сделать values/attrs.xml ресурсы, подобные этому

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="**com.admob.android.ads.AdView**"><--- where u want to use
       <attr name="backgroundColor" format="color" />
       <attr name="TextColor" format="color" />
       <attr name="keywords" format="string" />
       <attr name="refreshInterval" format="integer" />
    </declare-styleable>
</resources>

Согласно примечаниям к выпуску SDK,

Класс android.R.styleable и его поля были удалены из общедоступного API, чтобы лучше обеспечить прямую совместимость для приложений. Константы, объявленные в android.R.styleable, зависят от платформы и могут быть произвольно изменены в разных версиях, поэтому они не подходят для использования приложениями. Вы по-прежнему можете получить доступ к настраиваемым атрибутам платформы из ваших ресурсов или кода. Для этого объявите пользовательский элемент ресурса, используя файл res/values ​​/ R.attrs вашего проекта, а затем объявите атрибут внутри. Примеры см. В разделе "sdk" /samples/ApiDemos/res/values/attrs.xml. Для получения дополнительной информации о пользовательских ресурсах см. Пользовательские ресурсы макета. Обратите внимание, что документация android.R.styleable по-прежнему предоставляется в SDK, но только в качестве ссылки на настраиваемые атрибуты платформы для различных элементов.

Посмотрите на код ApiDemos и файл res/values ​​/ attrs.xml

В моем случае я случайно сделал import android.R вместо того import com.<mypackage>.R.

Заменить <mypackage> с именем вашего пакета (или просто удалите текущий импорт, а все остальное сделает Android Studio).

Вы можете получить доступ к стилю уровня пакета, как это

<yourpackagename>.R.styleable.name

У меня была неопределенная ошибка стиля, отображаемая в Android Studio, но затем я заметил, что сборка прошла успешно. Я сделал недействительный кеш и перезапуск, и проблема исчезла.
(Мне потребовалось слишком много времени, чтобы понять это.)

Просто обязательно используйте:

      import com.<your-package>.R

нет:

      import android.R

Что вам нужно сделать, это объявить свой стиль в attrs.xml, а не resources.xml. Тогда вы сможете ссылаться на него из своего кода следующим образом:

R.styleable.TheMissingTabWidget

Копирование/вставка кода в файл может добавить импорт на лету. Проверьте свои операторы импорта.

Необходимо удалить следующее.

      import android.R

Имена файлов типа attrs.xml, colors.xml значения не имеют. Это только для лучшей организации.

Запись должна быть в XML-файле под значениями папки (имя папки имеет значение). По соглашению давайте сохраним attrs.xml

Любая из следующих записей в порядке. Вам не нужно полное имя класса.

        <declare-styleable name="com.mycom.app.MyClass">
        <attr name="isSelected" format="boolean"/>
    </declare-styleable>

  <declare-styleable name="MyClass">
        <attr name="isSelected" format="boolean"/>
  </declare-styleable>

На самом деле, полное имя будет немного дополнительной проблемой. Сделает имя ресурса слишком длинным при доступе к нему в классе.

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