Заменить (или «переопределить») строку в проекте библиотеки Android - PullRequest
28 голосов
/ 24 ноября 2010

Я пытался создать проект библиотеки Android, и хотя процесс сборки работает нормально, у меня возникли некоторые проблемы с заменой ресурса в проекте, который использует библиотеку.

Inмоя библиотека у меня есть:

  1. A library_layout.xml, содержащая

  2. Java-файл, который вызывает

    ((TextView) this.findViewById (R.id.str_my_string)). SetText (R.string.my_string);

  3. Ресурс strings.xml, содержащий

    Заполнитель

В проекте с использованием библиотеки у меня есть

  1. Ресурс strings.xml, содержащий

    Фактическое содержимое строки

Я ожидаю, что при запуске проекта с использованием библиотеки текстовое представление отображает Фактическое содержимое строки , но на самом делесодержит false .

Глядя в приложение, которое использует библиотеку, я do вижу два R файла, и оба имеют R.string.my_string и обаони равны одному и тому же числовому значению.

1 Ответ

60 голосов
/ 08 декабря 2010

У меня такое же расположение, и оно работает для меня, как и ожидалось.

В библиотеке есть макет / класс с этой ссылкой на строковые ресурсы:

<TextView android:id="@+id/studentSinceLabel">

Библиотека предоставляет значение по умолчаниюзначение в его strings.xml:

<string name="studentSinceLabel">Student Since</string>

Основное приложение имеет это значение в своем strings.xml:

<string name="studentSinceLabel">Client Since</string>

Когда я получаю значение для этого ресурса в строках основных приложений.xml, я вижу «Client Since», когда приложение запускается, когда я удаляю его из основного приложения strings.xml, я вижу значение из библиотеки «Student Since».

Кажется, это ожидаемое поведениеосновываясь на моем прочтении здесь: http://developer.android.com/tools/sdk/eclipse-adt.html

Соответствующая цитата по ссылке выше:

В тех случаях, когда идентификатор ресурса определяется как в приложении, так и в библиотеке, инструменты гарантируютчто ресурс, объявленный в приложении, получает приоритет, и что ресурс в проекте библиотеки не скомпилирован в приложение .apk.Это дает вашему приложению возможность гибко использовать или переопределять любое поведение ресурсов или значения, определенные в любой библиотеке.

...