Как переопределить чертежи, определенные в проекте библиотеки Android?

У меня есть два приложения для Android с аналогичной функциональностью, но с разными чертежами и макетами.

Я хотел бы поместить весь код и ресурсы в проект библиотеки и переопределить некоторые чертежи и макеты в двух приложениях, которые будут ссылаться на эту библиотеку.

Я создал приложение, которое ссылается на библиотеку. Я скопировал все ресурсы из библиотеки в приложение и изменил некоторые чертежи. Я также изменил некоторые из строковых ресурсов. Когда я просматриваю один из измененных макетов в редакторе макета в Eclipse, я вижу правильные переопределенные изображения.

Когда я запускаю приложение, я вижу, что строковые ресурсы, которые я изменил в приложении, отображаются правильно (строки библиотеки переопределены ресурсами приложения), но чертежи моего ImageView все взяты из ресурсов библиотеки.

Я также внес изменения в некоторые ресурсы макета (перемещены и изменены некоторые изображения). Когда я запускаю действие, которое использует измененный макет (действие, исходный код которого находится в библиотеке), я вижу новый (приложение) макет со старыми (библиотечными) чертежами.

Я попытался определить чертежи ImageView двумя способами:

  • в макете xml: android:src="@drawable/image_id"

  • в коде действия:

    ImageView view = (ImageView)findViewById(R.id.viewId);
    view.setImageResource(R.drawable.image_id);
    

В обоих случаях изображение, которое я вижу, берется из ресурсов проекта библиотеки, а не приложения.

Если мне не удастся решить эту проблему, мне придется дублировать весь код в обоих приложениях, что было бы позором.

Я что-то делаю неправильно?

Ответы

Ответ 1

Как я уже писал в комментарии выше, мне удалось решить мою проблему, очистив проекты и перестроив их.

Ответ 2

Исходя из моего опыта, вы можете заменить ресурс с возможностью рисования в библиотечном модуле с помощью стиля и refs.xml.

Сначала вам нужно объявить ресурс с возможностью рисования в стиле, например

<style name="drawable_base_style">
    <item name="android:src">@drawable/base</item>
</style>

то в приложении (модуль или проект, в зависимости от вашей IDE) переопределите стиль

<style name="drawable_base_style_app">
    <item name="android:src">@drawable/app</item>
</style>

и используйте refs.xml, чтобы указать новый стиль.

<item name="drawable_base_style" type="style">@style/drawable_base_style_app</item>

то последний шаг: пересечь пальцы.

Ответ 3

Не копируйте-вставьте вещи, просмотрите свой проект, чтобы предоставить Drawable resourceId в качестве параметра для вашего объекта.

Ответ 4

Я сделал то же самое и не имел проблем. Изображение отменено.