У меня есть два проекта Android, "проект библиотеки", содержащий пользовательский макет, и "проект приложения", содержащий приложение, которое использует макет.
Кажется, что все создается и выполняется отлично, за исключением того, что редактор визуального макета генерирует исключение ClassNotFoundException (которое, как я полагаю, является ошибкой в подключаемом модуле), но когда я пытаюсь начать использовать атрибуты, определенные для пользовательский макет в xml, я больше не могу строить. То есть; это работает:
<?xml version="1.0" encoding="utf-8"?>
<se.fnord.android.layout.PredicateLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="asdfasdf"
/>
</se.fnord.android.layout.PredicateLayout>
Если это не так:
<?xml version="1.0" encoding="utf-8"?>
<se.fnord.android.layout.PredicateLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fnord="http://schemas.android.com/apk/res/se.fnord.android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
fnord:layout_horizontalSpacing="1px"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="asdfasdf"
/>
</se.fnord.android.layout.PredicateLayout>
Сбой сборки с сообщением от aapt:
ОШИБКА Идентификатор ресурса не найден для атрибута 'layout_horizontalSpacing' в пакете 'se.fnord.android'
Идентификатор ресурса существует в R файле, а attrs.xml содержит проект библиотеки, и если я помещаю код макета и ресурсы непосредственно в проект приложения, все работает нормально. Атрибут layout_horizontalSpacing (и layout_verticalSpacing) - это настраиваемый атрибут, используемый в классе PredicateLayout.LayoutParam для указания расстояния до следующего виджета.
До сих пор я пробовал стандартные способы затмения, указав ссылки на проект и зависимости от проекта. Мне также сказали попробовать тег в манифесте приложения, что не помогло.
Итак, что мне нужно сделать для ссылок в xml файле?
Я не знаю, соответствует ли это, но манифест библиотеки выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="se.fnord.android"
android:versionCode="1" android:versionName="1.0.0">
</manifest>
"Приложение" выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="se.fnord.appname"
android:versionCode="1" android:versionName="1.0.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".AppName"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
( "PredicateLayout", btw, является очищенной версией этого).