概念
meta-data就像其名一样,主要用来定义一些组件相关的配置值。
按照官方定义,metadata是一组供父组件使用的名值对(name-value pair),因此相应的meta-data元素应该定义在相应的组件中。即如果想在activity中使用metadata,那么meta-data必须定义在AndroidManifest.xml的activity声明中。
使用
所有的名值对被包装成Bundle供组件使用,因此使用方式同Bundle。metadata普通值由value属性给出,资源ID由resource属性给出。
比如我们定义资源
1 2 3 |
|
定义metadata
1 2 3 4 5 6 7 8 9 |
|
那么有:
?
1 2 3 |
|
由于resource指向资源ID,因此用metadata可以定义一些稍微复杂的值。
比如要定义一副图片,则可以用这个,然后在代码中用getInt()取出图片的ID:
?
1 2 |
|
使用问题
形如:
1 2 3 |
|
类似这样的值如果使用bundle.getString()的话是不起作用的,因为Bundle中使用的是形如:
1 |
|
的代码获取一个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中引用此值。
示例代码
附:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
meta-data官方地址 http://developer.android.com/reference/android/os/Bundle.html