本文概述
- 1.创建资源文件
- 2.注册你的资源文件
- 3.检索Java中的资源值
以本机第三方库的用法为例, 该库允许你自定义标签。使用Java, 自定义标签的方法不希望将字符串作为值, 而是希望使用数字(@StringRes int stringRes), 这使得使用javascript中的字符串进行自定义成为不可能。因此, 你必须求助于本地资源, 请Cordova允许的做法。在本文中, 你将学习如何在Cordova插件中为android添加自定义资源文件。
1.创建资源文件【如何在Android的Cordova插件中添加和检索资源(字符串)】在此示例中, 我们将在名为” StringsFoo.xml” 的插件的Android文件夹(yourplugin / src / android)中创建一个新的xml文件, 该文件中将包含一个名为welcome_message的字符串资源:
<
?xml version="1.0" encoding="utf-8"?>
<
resources>
<
string name="welcome_message">
Hello, welcome<
/string>
<
/resources>
2.注册你的资源文件现在, 修改插件中的plugin.xml文件, 并添加带有< resource-file> 标记的新资源文件(请注意, 文件的路径可以根据你的需要而变化):
注意不要给定string.xml文件的名称, 因为此文件已存在于任何项目中, 并且如果被覆盖, 则cordova项目将无法工作, 因为它包含一些重要值作为应用程序名称。
<
?xml version="1.0" encoding="utf-8"?>
<
plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
id="com.blablabla.bla"
version="1.0.0">
<
name>
Your Plugin Name<
/name>
<
!-- Add a new resource file from the plugin to the project
In your plugin development, its located in /yourplugin/src/android/StringsFoo.xml
and it will be added to the res/values folder of your Android Application
-->
<
platform name="android">
<
resource-file src="http://www.srcmini.com/src/android/StringsFoo.xml" target="res/values/StringsFoo.xml" />
<
/platform>
<
/plugin>
从理论上讲, 将插件安装在Cordova项目中后, 它将成功将新资源添加到项目中。
3.检索Java中的资源值你可能在构建时就知道(也许不是), aapt工具会收集你已定义的所有资源(尽管文件是单独的或文件中有明确的定义), 并为它们分配资源ID(如果你使用第三方库, 则它们允许你来自定义一些值(例如标签), 但它们希望将ID作为参数, 而不是字符串本身)。资源ID是32位数字, 格式为:PPTTNNNN。 PP是资源所在的包; TT是资源的类型; NNNN是该类型资源的名称。对于应用程序资源, PP始终为0x7f。
检索资源ID的算法是使用活动, 从活动中检索资源, 然后使用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());
但是, 如果你不使用需要资源ID的第三方库, 则此数字可能对你没有用, 而是字符串。要检索名称为” 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等, 但不要忘记, 都不要将getter方法更改为正确的类型(如果你使用的是布尔值, 请使用getBoolean而不是getString)。
注意如果你正在使用cordova, 但是你正在另一个活动中(某些活动不会扩展cordova), 则可以使用相同的代码, 但用你正在使用的活动替换cordova.getActivity。
编码愉快!
推荐阅读
- 如何在android studio中启用设备框架()
- 如何使用Cordova在android中更改应用程序标题颜色(在最近的应用程序视图中)
- 如何在Cordova项目中更改Android棒棒糖和棉花糖的状态栏颜色
- 如何在Cordova中更改apk的版本代码
- 如何检查应用程序是否已安装在Android设备上并使用Cordova打开它
- 如何在Cordova中将文本转换为语音(语音合成)
- 如何在Cordova中使用javascript将图像从设备转换为base64
- 如何使用Cordova从设备上的base64字符串创建图像文件
- 如何在Android中使用Cordova创建SFTP客户端