当前位置: 代码迷 >> Android >> Android学习札记:Android资源总结
  详细解决方案

Android学习札记:Android资源总结

热度:18   发布时间:2016-05-01 14:57:54.0
Android学习笔记:Android资源总结

Android应用资源可分为两大类:

1、无法直接访问的原生资源,保存在asset目录下,应用程序可以使用AssetManager来访问这些资源

2、可以通过R资源清单类访问的资源,保存在res目录下

 

先来看原生资源,指的就是跟android无任何关系可以独立存在的文件,在android项目中经常放置的位置有:asset目录、/res/raw/目录、/res/xml/目录(该目录只放xml)。

获取这些地方的原声资源的方法:

asset:

AssetManager am = getAssets();    //获取该应用的AssetManagerAssetFileDescriptor afd = am.openFd("shot.mp3");    //获取指定文件对应的AssetFileDescriptorMediaPlayer mediaPlayer = new MediaPlayer();mediaPlayer.setDataSource(afd.getFileDescriptor());    //使用MediaPlayer加载指定的声音文件

 

/res/raw/目录:

Android SDK会在R清单类中为该目录下的资源生成一个索引项

MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.bomb);

或者 java代码中通过调用Resources的openRawResource(int id)方法来获取该资源的二进制输入流。

 

/res/xml/目录:

通过getXml(int id)获取XmlResourceParser,通过XmlResourceParser对该xml进行pull解析

也可以通过openRawResource(int id)获取对应的输入流进行操作。

 

看完了原生资源之后,接下来我们分析一下Android应用资源,存放的路径为/res/路径下的各个子目录

非原生资源中的资源根据标签又可以分为两类:resource资源和非resrouce资源

其中,resource资源中存放各种简单的xml文件,包括字符串值、整数值、颜色值、数组等一个简单的常量。

而非resource资源包括很多种,他们和resource的区别就是这一类文件可以说是一个组合的效果,是带有逻辑在里面的,不像resource资源就一简单常量。

resource资源包括:string、color、array、style、dimen、boolean、integer...

非resource资源包括:anim、color、drawable、menu(这里的color和上面的color的区别是此处的color文件不是一个些简单的常量组合成,而是带有逻辑关系)

 

resource资源很简单,所有的父标签统一是<resource>,只是不同的资源对应的子标签不同,统一的格式如下:

<resource>    <子标签名 name="xxx">xxx</子标签名>    ......    ......</resource>

array资源的每个子标签下面还有一些<item>标签,作为数组的值。

 

下面我们关键来看非resource资源:

AnimationDrawable,该资源可放置在/res/anim/路径下。

动画资源的父标签<set>,有四个子标签可以指定:<alpha>、<scale>、<translate>、<rotate>,在指定rotate的时候要设置pivotX和pivotY为变换的“中心点”

使用也非常简单:

Animation anim = AnimationUtils.loadAnimation(context,R.anim.my_anim);


StateListDrawable,用于组织多个Drawable对象,当使用该资源的时候,StateListDrawable对象所显示的Drawable对象会随着目标组件状态的改变而自动切换

该资源的父标签<selector>,可以包含多个子标签<item>,该子标签可以指定如下属性:

1、android:color或者android:drawable

2、android:state_xxx,指定一个特殊状态

<selector xmlns:android=http://schemas.android.com/apk/res/android>    <item android:color="hex_color" android:state_pressed=["true" | "false"]/></selector>


LayerDrawable,可以包含一个Drawable数组,系统会按这些Drawable对象的数组顺序来绘制他们,索引最大的Drawable对象将会被绘制在最上面

该资源的父标签<layer-list>,可以包含多个子标签<item>,该子标签可以指定如下属性:

1、android:drawable

2、android:id

3、android:buttom | top | left | right,用于指定一个长度值,用于指定将该Drawable对象绘制到目标组件的指定位置。

<layer-list xmlns:android=http://schemas.android.com/apk/res/android>    <item android:id="@android:id/background" androdi:drawable="@drawable/grow"/>    ......    <item>        <bitmap android:src="@drawable/icon" android:gravity="center"/>    </item>    ....</layer-list>


ShapeDrawable,用于定义一个基本的几何图形的形状和属性

该资源的父标签<shape>,可以指定属性:android:shape=["rectangle" | "oval" | "line" | "ring"],可以包含多个子标签<corners>、<gradient>、<padding>、<size>、<solid>、<stroke>,该子标签可以指定如下属性:

定义ShapeDrawable对象的完整语法格式如下:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape=["rectangle" | "oval" | "line" | "ring"]>    <!-- 定义几何图形的四个角的弧度-->    <corners        android:radius="integer"        android:topLeftRadius="integer"        android:topRightRadius="integer"        android:bottomLeftRadius="integer"        android:bottomRightRadius="integer"/>    <!--定义使用渐变色填充  -->    <gradient        android:angle="integer"        android:centerX="integer"        android:centerY="integer"        android:centerColor="integer"        android:endColor="color"        android:gradientRadius="integer"        android:startColor="color"        android:type=[ " linear" | "radial" | "sweep"]        android:useslevel=["true" |"false"]/>    <!-- 定义几何形状的内边框 -->    <padding        android:left="integer"        android:top="integer"        android:right="integer"        android:bottom="integer"/>      <!-- 定义几何图形的大小 -->    <size        android:width="integer"        android:color="color"        android:dashWidth="integer"        android:dashGap="integer"/>    <!-- 定义使用单种颜色填充 -->    <solid        android:color="color"/>    <!-- 定义为几何图形绘制边框 -->    <stroke        android:width="integer"        android:color="color“        android:dashWidth="integer"        android:dashGap="integer"/></shape>


ClipDrawable资源,代表从其他为图上截取的一个“图片片断”,使用标签<clip>可以指定如下属性:

1、android:drawable,指定截取的源drawable对象

2、android:clipOrientation,指定截取方向

3、android:gravity,指定截取时对齐方式

使用ClipDrawable对象时,可调用setLevel(int level)方法来设置截取的区域大小,当level为0时,截取的图片片断为空;当level为10000时,截取整张图片

 

菜单资源,通常放在/res/menu/目录下,父标签为<menu>,且无需指定任何属性,可以包含如下子标签:

1、<item>

    a、android:id

    b、android:title

    c、android:icon

    d、android:alphabeticShortCut,为菜单项指定字符快捷键

    e、android:numericShortCut,为菜单项指定数字快捷键

    f、android:checkable,设置该菜单项是否可选

    g、android:checked,设置该菜单项是否已选中

    h、android:visible

    i、android:enable

2、<group>,可以包含多个<item>

3、checkableBehavior指定菜单的选择行为,可选择none、all、single

4、visible

5、enable

  相关解决方案