HTML5   发布时间:2022-04-25  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了meta-data小结大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概念

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

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

使用

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

?
1
2
3
< String name = "x_key" >resource key</ String >
//R
public static final int ic_launcher=0x7f020000;
定义Metadata


?
1
2
3
4
5
6
7
8
9
< 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" />

那么有:

?
1
2
3
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:
?
1
2
int imagEID = Meta.geTint( "com.xesam.img" );
((ImageView) findViewById(R.id.img)).setImageresource(imagEID);

使用问题

形如:

?
1
2
3
< Meta-data
     android:name = "com.xesam.key_1"
     android:value = "000" />
类似这样的值如果使用bundle.getString()的话是不起作用的,因为Bundle中使用的是形如:
?
1
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中引用此值。

示例代码

附:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//在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" );

大佬总结

以上是大佬教程为你收集整理的meta-data小结全部内容,希望文章能够帮你解决meta-data小结所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。