Содержание
В Android ресурсы — это дополнительные файлы и статический контент, который использует ваш код, например, растровые изображения, определения макета, строки пользовательского интерфейса, инструкции по анимации и многое другое. Если вы думаете об этом, возможно, использование собственных ресурсов не имеет смысла, так как мы используем гибридную технологию. Все должно быть теоретически обработано с помощью Javascript, не так ли? Ну, как всегда, в разработке есть исключения.
Возьмите в качестве примера использование собственной сторонней библиотеки, которая позволяет настраивать метки. В Java метод настройки метки не ожидает строку как значение, а ожидает число (@StringRes int stringRes
), вещь, которая делает настройку со строкой из JavaScript невозможной. Поэтому вы должны прибегнуть к родным ресурсам, практиковать которые позволяет кордова. В этой статье вы узнаете, как добавить собственный файл ресурсов для Android в свой плагин Cordova.
1. Создайте файл ресурсов
В этом примере мы собираемся создать новый XML-файл в папке Android вашего плагина (yourplugin/src/android
) с именем "StringsFoo.xml"
, это будет иметь строковый ресурс, идентифицированный с именем welcome_message
:
Hello, welcome
2. Зарегистрируйте свой файл ресурсов
Теперь измените plugin.xml
файл в вашем плагине и добавьте новый файл ресурсов с тег (обратите внимание, что путь к файлу может варьироваться в зависимости от ваших потребностей):
Заметка
Не указывайте в качестве имени файла strings.xml
поскольку этот файл уже существует в любом проекте и если он перезаписан, проект cordova не будет работать, поскольку он содержит некоторые важные значения в качестве имени приложения.
Your Plugin Name
Теоретически, после установки плагина в проекте Cordova он успешно добавит новый ресурс в проект.
3. Получить значение ресурса в Java
Как вы, возможно, знаете (возможно, нет) во время сборки, инструмент aapt собирает все ресурсы, которые вы определили (хотя отдельные файлы или явные определения в файлах), и назначает им идентификаторы ресурсов (если вы используете сторонние библиотеки, они позволяют вам настроить некоторые значения, такие как метки, но они ожидают идентификатор в качестве аргумента, а не саму строку). Идентификатор ресурса представляет собой 32-разрядное число в форме: PPTTNNNN. PP — пакет, для которого предназначен ресурс; TT — тип ресурса; NNNN — это имя ресурса этого типа. Для ресурсов приложений PP всегда равен 0x7f.
Алгоритм получения идентификатора ресурса состоит в том, чтобы использовать действие, из действия извлечь данные и затем использовать метод getIdentifier, который ожидает в качестве первого аргумента имя ресурса, в качестве второго типа (в данном случае строку) и как Третий аргумент — имя пакета приложения. Это было бы в вашем основном классе плагина, который расширяет CordovaPlugin как:
// The name of the string resource
String name = "welcome_message";
// Retrieve the identifier (in this case the number is 2131165238 that obviously changes in your project)
int identifier = cordova.getActivity().getResources().getIdentifier(name, "string", cordova.getActivity().getPackageName());
Однако, если вы не работаете со сторонней библиотекой, для которой требуется идентификатор вашего ресурса, возможно, это число не для вас, а для строки. Чтобы получить строковый ресурс с именем "welcome_message"
преобразовать идентификатор в строку, используя следующий код:
String name = "welcome_message";
// Hello, welcome
String resource_text = cordova.getActivity().getString(cordova.getActivity().getResources().getIdentifier( name, "string", cordova.getActivity().getPackageName()));
Из деятельности используйте getString
метод, который ожидает в качестве первого аргумента идентификатор ресурса. Изменяя тип (второй параметр getIdentifier
метод) вы можете получить другой тип ресурсов, таких как bool
, layout
и т. д., но не забудьте также изменить метод получения на правильный тип (если вы получаете логическое значение, используйте getBoolean
вместо getString
).
Заметка
Если вы работаете с cordova, но работаете в другом упражнении (какое-то действие, которое не расширяет cordova), вы можете использовать тот же код, но заменить cordova.getActivity
с activity
с которым ты работаешь.