Android импорт ресурсов из проекта библиотеки
можно ли использовать ресурсы, такие как строки, определенные в проектах библиотек в проектах приложений? если да, то как? потому что я не могу решить строки, которые я хотел бы решить следующим образом:
String title = "sample";
int id = ressources.getIdentifier(title, "string", "com.package");
дает мне это исключение
WARN/ResourceType(278): нет идентификатора пакета при получении значения для номера ресурса 0x00000000 Предупреждение/система.err (278): android.содержание.res.Resources$NotFoundException: идентификатор ресурса строки #0x0
в строка ("образец"), которую я ищу, определенно находится в этом пакете, предоставленном в строках.xml проекта библиотеки. я даже могу видеть это в R.java
4 ответов
похоже
int id = ресурсы.getIdentifier (название, "строка", " com.пакет");
возвращается 0
, что означает, что он не может найти указанный ресурс. Последующий вызов ressources.getIdentifer()
вызывает исключение, поскольку 0
не является допустимым идентификатором ресурса.
вот некоторые отладочные / альтернативные идеи:
-
вы, вероятно, уже сделали это дюжину раз, но это не больно упоминание: сначала перепроверьте правописание всего:
- правильное написание пакета (как в проекте библиотеки, так и в клиентском проекте),
- строка ресурсов верна (проект библиотеки и проект клиента),
- библиотека орфография правильно в
uses-library
элементAndroidManifest.xml
, - etc.
- можете ли вы получить доступ к любым ресурсам в этой библиотеке или проблема специфична для этого ресурс (
title
) или он специфичен для этого типа ресурса(строк)? Вы можете получить доступ к ресурсам другой библиотеки?
- вы получаете доступ к библиотеке в виде файла jar? Вы можете 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 библиотеки.