2009-09-21 3 views
15

В ApiDemos, есть пример вида называется gallery1 который объявляет свой стиль в attrs.xml, как таковые:Пользовательские стили виджета Android: как помещать их в пространство имен?

<declare-styleable name="Gallery1"> 
    <attr name="android:galleryItemBackground" /> 
</declare-styleable> 

теперь, я хочу сделать то же самое для моих виджетов, но с использованием другого Пространство имен. Однако, как только я заменяю андроида: пространство имен с чем-то другим, я получаю эту ошибку:

ERROR: In Gallery1, unable to find attribute myns:galleryItemBackground

Невозможно найти атрибут? Почему он ищет атрибут, который я собираюсь объявить? Разве пункт этого файла не может назвать ваши собственные пользовательские атрибуты?

Интересно отметить, что он работает, если вы не предоставляете собственное пространство имен, а просто имя атрибута.

ответ

1

Я нашел this статья полезная в аналогичной ситуации.

«Обращение к нашим новым атрибутам на самом деле является двухэтапным процессом. Сначала мы объявили новое пространство имен, а затем мы указали значения наших новых атрибутов в использовании XML».

+0

Я читал эту статью, но она устарела и ошибается (она просто не работает так, по крайней мере, не больше). – Matthias

+0

В статье отлично работает с Android 1.6 [проверено]. Но я не понял ваш вопрос. Вы не сможете указать какое-либо пространство имен при объявлении стиля, оно уже находится в вашем пространстве имен приложений. Хотя вам или кому-то еще нужно использовать attrs в XML-макетах, они должны использовать его в пространстве имен приложений. Поскольку мы используем андроид, указанный attrs с android: attr – bhatt4982

+0

Я думаю, что проблема может быть связана со мной, ссылаясь на эти стили из другого проекта. То есть я объявляю attrs.xml в проекте A, создаю JAR из него и пытаюсь получить к ним доступ в другом проекте B. Я всегда получаю «идентификатор ресурса, найденный для атрибута X». Он работает, когда не используется стилизованные атрибуты, а простые атрибуты. – Matthias

20

У меня была аналогичная проблема, что приводит к сообщению об ошибке Нет идентификатора ресурса найдено для атрибута в пакете

Решение для меня было объявить пространство имен при использовании пользовательского атрибута.

В файле XML, где вы используете настраиваемый атрибут указать:

xmlns:myns="http://schemas.android.com/apk/res-auto" 

...

<gallery.widget.package.Gallery1 


myns:myCustomAttr="xxx" 
/> 
+1

Моя борьба за последние 2 часа закончилась здесь. – Signcodeindie

+0

эй, как я могу узнать, какое из них - мое пространство имен? Я имею в виду, что ваш xmlns: myns и что такое мое? –

1

создать файл XML и вставьте ниже код и вставьте res-> значения папку

<declare-styleable name="Gallery1"> 
    <attr name="android:galleryItemBackground" /> 
</declare-styleable> 

, а затем скопировать код ниже

TypedArray typedArray=this.obtainStyledAttributes(R.styleable.Gallery1); 
     int back=typedArray.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0); 
     typedArray.recycle(); 

и установить в Уре виджетов фоне я имею в виду imageView.setBackgroundResource(back);

6

В случае, если кто-то еще интересно, у меня была та же проблема, и решить ее, добавив атрибут «формат» (кажется, он не принимает «строку 'по умолчанию):

<attr name="android:galleryItemBackground" format="integer"/> 
+0

Спасибо, это была моя проблема. – simonair

+0

& 'чистый проект' :-) – JRun

Смежные вопросы