Android import ressources из проекта библиотеки

Можно ли использовать ressources, такие как строки, которые определены в библиотечных проектах в прикладных проектах? Если да, то как? Потому что я наклоняю, кажется, разрешаю строки, которые я бы хотел решить следующим образом:

String title = "sample"; int id = ressources.getIdentifier(title, "string", "com.package"); 

Дает мне это исключение

WARN / ResourceType (278): идентификатор пакета при получении значения для номера ресурса 0x00000000 WARN / System.err (278): android.content.res.Resources $ NotFoundException: Идентификатор ресурса строки # 0x0

Строка («sample»), которую я ищу, определенно находится в этом пакете, представленном в файле strings.xml проекта библиотеки. Я даже вижу это в R.java

Solutions Collecting From Web of "Android import ressources из проекта библиотеки"

Так выглядит

Int id = ressources.getIdentifier (название, «строка», «com.package»);

Возвращает 0 , то есть не может найти указанный ресурс. Последующий вызов ressources.getIdentifer() вызывает исключение, так как 0 не является допустимым идентификатором ресурса.

Вот несколько отладочных / альтернативных идей:


  • Вы, наверное, уже сделали это десяток раз, но это не помешает упоминать: сначала перепроверьте написание всего:

    • Правильность написания пакета (как в библиотечном проекте, так и в клиентском проекте),
    • Строка ресурса верна (проект библиотеки и клиентский проект),
    • Является правильной написанием uses-library элементе uses-library AndroidManifest.xml ,
    • и т.п.

  • Можете ли вы получить доступ к любым ресурсам в этой библиотеке или проблема, связанная с этим ресурсом ( title ), или она специфична для этого типа ресурсов (строк)? Можете ли вы получить доступ к ресурсам другой библиотеки?

  • Вы обращаетесь к библиотеке как к файлу jar? Вы можете jar код, но вы не можете получить доступ к ресурсам из банки.

Android. Возможно ли создать пользовательскую библиотеку для использования в нескольких приложениях?


  • Вы пробовали альтернативный формат имени:

Код

 String fullyQualifiedResourceName = "com.package:string/sample"; int id = ressources.getIdentifier(title, null, null); if (id == 0) { Log.e(TAG, "Lookup id for resource '"+fullyQualifiedResourceName+"' failed"; // graceful error handling code here } 

  • Вы можете попробовать использовать отражение:

Код

 final String resourceName= "sample"; final int id; try { final Class resourceType = com.package.R.string.class; final Field field = resourceType.getField(title); id = field.getInt(null); } catch (final Exception e) { Log.e(TAG, "Lookup id for resource '"+resourceName+"' failed"; // graceful error handling code here } 

Android, получив идентификатор ресурса из строки?

http://daniel-codes.blogspot.com/2009/12/dynamically-retrieving-resources-in.html

В коде проекта импортируйте класс R:

import com.application.libraryproject.R

Затем вы можете ссылаться на любую строку или другой XML-ресурс, подобный этому:

String mystring = getString(R.string.app_name);

или похожие.

У меня была аналогичная проблема, и я решил ее с помощью getPackageName() в Библиотеке проектов.

В вашем случае это должно быть:

 String title = "sample"; int id = ressources.getIdentifier(title, "string", getPackageName()); 

Да, определите ресурсы в вашем проекте библиотеки, как обычно. Затем ссылайтесь на них в проекте, импортируя библиотеку, добавив класс R с именем пакета в AndroidManifest.xml библиотеки.