android meta-data

来源:互联网 发布:解压软件哪个好 编辑:程序博客网 时间:2024/05/20 20:39

概念

meta-data就像其名一样,主要用来定义一些组件相关的配置值。

按照官方定义,metadata是一组供父组件使用的名值对(name-value pair),因此相应的meta-data元素应该定义在相应的组件中。即如果想在activity中使用metadata,那么meta-data必须定义在AndroidManifest.xml的activity声明中。

使用

所有的名值对被包装成Bundle供组件使用,因此使用方式同Bundle。metadata普通值由value属性给出,资源ID由resource属性给出。
比如我们定义资源

<string name="x_key">resource key</string>//Rpublic static final int ic_launcher=0x7f020000;

?
定义metadata

<meta-data    android:name="com.xesam.key_1"    android:value="x_key" /><meta-data    android:name="com.xesam.key_2"    android:value="@string/x_key" /><meta-data    android:name="com.xesam.img"    android:resource="@drawable/ic_launcher" />

?

那么有:

metadata.getString("com.xesam.key_1") ==> "x_key"metadata.getString("com.xesam.key_2") ==> "resource key"metadata.getInt("com.xesam.img")      ==> 0x7f020000

?
由于resource指向资源ID,因此用metadata可以定义一些稍微复杂的值。 

比如要定义一副图片,则可以用这个,然后在代码中用getInt()取出图片的ID:

int imageId = meta.getInt("com.xesam.img");((ImageView) findViewById(R.id.img)).setImageResource(imageId);


使用问题

形如:

<meta-data    android:name="com.xesam.key_1"    android:value="000" />

?
类似这样的值如果使用bundle.getString()的话是不起作用的,因为Bundle中使用的是形如: 
?
return (String) o;
的代码获取一个StringValue值的,但是在将metadata包装成bundle的时候,"000"被解析成整数0, 
因此bundle.getString("com.xesam.key_1")返回的是(String)0,显然,java是不允许这样的,因此最后得到的是null。 话说android为什么不是用String.valueOf()或者obj.toString()呢?

为了避免这种情况:
1,可以在形如000的字符串前面放个\0空字符,强迫android按照字符串解析000。
2,在资源文件中指定需要的值,然后在metadata的value中引用此值。

示例代码

附:

//在Activity应用<meta-data>元素。    ActivityInfo info = this.getPackageManager()            .getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);    info.metaData.getString("meta_name");     //在application应用<meta-data>元素。    ApplicationInfo appInfo = this.getPackageManager()            .getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);    appInfo.metaData.getString("meta_name");     //在service应用<meta-data>元素。    ComponentName cn = new ComponentName(this, MetaDataService.class);    ServiceInfo info = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);    info.metaData.getString("meta_name");     //在receiver应用<meta-data>元素。    ComponentName cn = new ComponentName(context, MetaDataReceiver.class);    ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA);    info.metaData.getString("meta_name");


?
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 边界路由 contiki边界路由 个人简历程序 2.编写一个C程序,假设图书馆的图书包含书名、编号和作者等3个属性,读者包含姓名和借书证属性,每位读 pythontcp实现聊天室 jstack RS编译码器 RS编译码器原理 高德地图 导航信息 当前导航路径信息 实时导航信息 高德导航时Navi的信息 高德NaviInfo 安卓蓝牙发送信息 clj.fastble 先采用队列求一条最短迷宫路径长度minlen,再采用栈求所有长度为minlen的最短迷宫路径 iOS蓝牙 pycharm激活 shadowsocks下载 shadowsocks下载 开源沙龙 C++程序设计从键盘中输入两个整数,求这两个整数的最大公约数和最小公倍数。 江南大学五部曲 centos搭建ss 算法之美_源代码发布(8) understand halfaSPIclockcycleproducesaclockedge 贪心算法活动 TRIZ系列-创新原理-17 朴素贝叶斯分类 王者荣耀金币 探索性数据分析演示 治安防控 治安 TRIZ系列-创新原理-19 TRIZ系列-创新原理-20 利用图像的平移、旋转、缩放、镜像等空间几何变换实现对图像的自适应缩放、几何变换等特效 利用图像的平移、旋转、缩放、镜像等空间几何变换实现对图像的几何变换等特效 [Err]1005-Can\'tcreatetable\'item4.#sql-1238_2c\'( SAPFICO财务成本知识