Android中资源获取的总结

程序就是对资源的获取,加以处理的过程,首先要有获取资源的过程!这里总结的是详解的一本书里的第三章。

1.颜色资源:颜色值是通过RGB三原色和alpha,也就是透明度,定义的开始是一个#后面跟上ARGB对应的16进制值。xml文件格式如下:

1 <?xml version="1.0" encoding="utf-8"?> 
2 <resources>     
3     <color name="read_bg">#f00</color>     
4     <color name="blue_text">#0000ff</color> 
5 </resources> 

使用直接用@color/blue_text就可以了。

2.字符串资源:类似颜色,只是xml子元素节点是string,其他都差不多。

3.尺寸资源:我们一般会遇到的尺寸单位有:厘米、毫米、像素、英尺等等,在此总结一下。

单位表示 单位名称                                    说明
px 像素 屏幕上的真实像素表示
in 英尺 基于屏幕的物理尺寸
mm 毫米 基于屏幕的物理尺寸
pt 英尺的1/72
dp 和密度无关的像素 相对于屏幕物理密度的抽象单位
sp 和精度无关的像素 和dp类似

dp其实就是dip,和sp是基本相似的,如果设置表示长度、高度等属性时可以使用dp 或sp。但如果设置字体,需要使用sp。dp 是与密度无关,sp 除了与密度无关外,还与scale 无关。如果屏幕密度为160,这时dp 和sp 和
px 是一样的。1dp=1sp=1px,但如果使用px 作单位,如果屏幕大小不变(假设还是3.2 寸),而屏幕密度变成了320。那么原来TextView 的宽度设成160px,在密度为320 的3.2 寸屏幕里看要比在密度为160 的3.2 寸屏幕上看短了一半。但如果设置成160dp 或160sp 的话。系统会自动将width 属性值设置成320px 的。也就是160 * 320 / 160。其中320 / 160 可称为密
度比例因子。也就是说,如果使用dp 和sp,系统会根据屏幕密度的变化自动进行转换。
px:表示屏幕实际的象素。eg:320*480 的屏幕在横向有320个象素,在纵向有480 个象素。
in:表示英寸,是屏幕的物理尺寸。每英寸等于2.54 厘米。
官方定义dip等于160dpi像素下的一个物理像素点,所以dip到像素的转换公式是:
                                      pixels = dps * density / 160;
在xml文件中,尺寸的定义节点是<dimen></dimen>。

4.获取项目中的原始xml文件:Resources.getXML

5.Drawable资源:Resources.getDrawable();

6.Layout布局资源:可以通过Layout.Inflater填充器导入xml文件的layout布局。在activity中调用findViewById时,找的是对应的setConentView的那个layout里的组件,因此,如果你的activity里用了别的layout时,例如listview适配时用到的listview的layout文件,需要用inflate先引入那个layout,然后用view.findViewById才能找到那个对应的组件。

7.使用菜单资源:任何视图的创建都有2种方式,代码实现和布局文件中声明。Menu也可以通过布局文件实现,通过MenuInflater类来引入。典型的菜单资源文件有这样的结构:<menu>根元素,在根元素里嵌套有<item>和<group>子元素,<item>元素中也可以嵌套<menu>形成子菜单。
<menu>根元素没有属性;<group>表示一个菜单组,相同的菜单组可以一起设置属性,;<item>表示菜单项。

8.引用系统资源:@android:color  这里多了个:android。

9.另外一种资源值允许你引用当前主题中的属性的值。这个属性值只能在样式资源和XML属性中使用;它允许你通过将它们改变为当前主题提供的标准变化来改变UI元素的外观,而不是提供具体的值。
          android:textColor="?android:textDisabledColor"

10.assets文件夹资源的访问:assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。
      1. 先在Activity里面调用getAssets()来获取AssetManager引用。
      2. 再用AssetManager的open(String fileName, int accessMode)方法则指定读取的文件以及访问模式就能得到输入流InputStream。 
      3. 然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStream.close()
      4.调用AssetManager.close()关闭AssetManager。

11.最后关于animation动画文件的访问,其实都是类似的,通过AnimationUtils.loadAnimation,来引入。


你可能感兴趣的:(Android中资源获取的总结)