У меня есть два проекта 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_horizontSpacing в пакете se.fnord.android
Идентификатор ресурса существует в R-файле, и файл attrs.xml содержал проект библиотеки, и если я поместил код макета и ресурсы непосредственно в проект приложения, все работает нормально. Атрибут layout_horizontSpacing (и 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» - это очищенная версия this ).