如何在Android的Cordova插件中添加和检索资源(字符串)

本文概述

在Android中, 资源是代码使用的其他文件和静态内容, 例如位图, 布局定义, 用户界面字符串, 动画说明等。如果你考虑一下, 也许本地资源的使用没有意义, 因为我们正在使用混合技术。理论上应该使用Java处理所有内容, 不是吗?好了, 开发例外情况一如既往。

以本机第三方库的用法为例, 该库允许你自定义标签。使用Java, 自定义标签的方法不希望将字符串作为值, 而是希望使用数字(@StringRes int stringRes), 这使得使用javascript中的字符串进行自定义成为不可能。因此, 你必须求助于本地资源, 请Cordova允许的做法。在本文中, 你将学习如何在Cordova插件中为android添加自定义资源文件。

1.创建资源文件

在此示例中, 我们将在名为” 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="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。

编码愉快!

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?