Как добавить и получить ресурс (строку) в плагине Cordova для Android

В 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 с которым ты работаешь.

Ссылка на основную публикацию
Adblock
detector