专栏名称: 鸿洋
你好,欢迎关注鸿洋的公众号,每天为您推送高质量文章,让你每天都能涨知识。点击历史消息,查看所有已推送的文章,喜欢可以置顶本公众号。此外,本公众号支持投稿,如果你有原创的文章,希望通过本公众号发布,欢迎投稿。
目录
相关文章推荐
stormzhang  ·  年底扣税变多了 ·  12 小时前  
stormzhang  ·  来自李子柒的压迫感 ·  昨天  
鸿洋  ·  理解Android ... ·  昨天  
51好读  ›  专栏  ›  鸿洋

如何使用Android自带的资源

鸿洋  · 公众号  · android  · 2017-06-01 07:30

正文

 本文作者


本文由iJero授权发布。

iJero的博客地址:

http://www.jianshu.com/u/aff729e04f65


场景介绍


项目中难免会有这样的需求,需要使用到系统自带的图标(drawable)、字符串(string)等资源,今天就主要记录一下string和drawable。


比如目前,我自己遇到这样的需求:显示一个apk或者是已经安装的应用的权限信息,并能准确描述出该权限的作用。


额,起初我的想法是酱紫的:获取出应用在AndroidManifest.xml中定义的user-permission,然后自己定义string字符串,对应起来……


可是现在当我开始正式做这个功能时,再细想当时的想法就尼玛了,这Android系统的权限就像山歌一样排队排……我自己写对应的字符串去排……要排到啥时候,那我岂不是要手写这…………………………么长的代码?


看来这个方案不可用,还是嫑这么折腾。


那怎么办?


额,看看模拟器上有什么吧:




哎哟不错哦,系统自带就有,Hiahia....。


然后通过翻看Android系统源代码啊!啊~就这么搞定了。(好直接,一点关子都不卖)


好,下面先鼓掌(手动鼓掌~)




额,不对,下面开始看代码:


在源代码base/core/res/AndroidManifest.xml文件中,我们最常用的联网权限是这样定义的权限:




可以看到定义的permission有android:description、 android:label两个属性。这不用解释了吧,直接看这两个引用对应的中文字符串定义:




没毛病,但是怎么用呢?


系统String


这都知道string的id了,就直接用吧~当然,普通的android.R.string. 后面怎么也点不出来的,所以这里要用特殊一点的方法获取Android自带的资源。


int lebId = Resources.getSystem()
            .getIdentifier("permlab_accessNetworkState", 
                "string", "android");
String lab = getString(lebId);


这就获取到了permlab_accessNetworkState(INTERNET权限)的标题资源id获取字符串就是普通的通过上下文getString()就行。


完整代码:





说了这么多,不要以为这没什么用,毕竟是获取系统级的资源,也看到了,这是自带国际化的字符串,我模拟器调成中文的语言,获取出来的就是咱伟大的国语酱紫。


那下面举一反三简单说说系统的drawable怎么用?




系统Drawable


首先看下要显示啥玩意儿……


看了半天啊,我决定用这张,OK不?





行,那就用这个吧,其实用法跟刚才那个获取字符串差不多……不信你看:

super easy for xml:




super easy for java:




super easy for display:





代码解释


好,现在回头看看getIdentifier方法的文档:




name:资源名称。

defType:资源类型。
defPackage:资源所在包。


后记


其实资源还有很多……
什么?资源多肯定是老司机?


兄弟,等等,有话好好说,把你的板砖拿开点,我说的真的是这个啊:
https://developer.android.google.cn/reference/android/R.html


各种类型的资源,都有~~~哈哈哈


R.anim、R.animator、R.array、R.attr、R.bool、R.color、R.dimen、R.drawable、R.fraction、R.id、R.integer、R.interpolator、R.layout、R.menu、R.mipmap、R.plurals、R.raw、R.string、R.style、R.styleable、R.transition、R.xml


如果你有想学习的文章直接留言,我会整理征稿。如果你有好的文章想和大家分享欢迎投稿,直接向我投递文章链接即可。


欢迎长按下图->识别图中二维码或者扫一扫关注我的公众号: