Android资源总结

摘要

在android开发过程中,经常会用到各种资源:字符串、颜色、样式、图片……经常会被这些资源搞得晕头转向,容易混淆,尤其是几种drawable类型的资源。下面对这些资源进行整理分类,让它们的格式和功能一目了然。

主体内容

Android的应用资源可以分为两大类:
- 可以通过R资源清单类访问的资源,保存在res目录下。
- 无法通过R资源清单类访问的原生资源,保存在assets目录下。
资源文件目录
资源目录

一、res目录下的各种资源

1、res/values目录

不建议在同一分资源文件中定义各种值,势必增加程序的维护难度,最好使用不同的文件来存放不同类型的值。如下:
strings.xml(字符串资源,布尔资源bools.xml,整型资源integers.xml)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">资源Demo</string>
    <string name="hello_world">Hello world!</string>
</resources>    

colors.xml(颜色资源)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="white">#ffffff</color>
    <color name="black">#000000</color>
</resources>

dimens.xml(尺寸资源)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
    <dimen name="content_font_size">20sp</dimen>
</resources>

arrays.xml(数组资源:普通类型数组array,字符串数组string-array,整型数组integer-array)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="color_array">
        <item>@color/white</item>
        <item>@color/black</item>
    </array>
    <string-array name="string_arr">
        <item>@string/app_name</item>
        <item>@string/hello_world</item>
    </string-array>
</resources>

//Activity中使用普通数组
TypedArray colors = res.obtainTypedArray(R.array.color_array);
view.setBackgroundDrawable(colors.getDrawable(position));
//Activity中使用字符串、整型数组
string[] texts = getResources().getStringArray(R.array.string_arr);

styles.xml(样式资源,还有主题theme资源,定义格式通style一样,主题资源对整个应用中的Activity或指定的Activity起作用,而style可以用于单个View组件)

<?xml version="1.0" encoding="utf-8"?>
<!--自定义样式,可以继承-->
<resources>
    <style name="style1">
        <item name="android:textSize">18sp</item>
        <item name="android:textColor">#ff0000</item>
    </style>
    <style name="style2" parent="style1">
        <item name="android:background">#123430</item>
        <item name="android:padding">8dp</item>
    </style>
</resources>
2、res/drawable目录

Drawable资源是Android中使用最广泛的资源,也是最灵活的一种资源,可以直接使用.png、.jpg、.gif、.9.png等图片资源,还可以使用能被系统编译成Drawable子类的xml文件。Drawable资源通常保存在res/drawable目录,也可保存在res/drawable-ldpi、res/drawable-mdpi、res/drawable-hdpi、res/drawable-xhdpi目录下
图片Drawable资源

//直接放在drawable目录下,就会出现在R清单中

edit_font_color.xml(StateListDrawable资源,Drawable对象会根据目标组件的状态的改变而自动切换)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:color="@color/pink"/>
    <item android:state_focused="false" android:color="@color/black"/>
</selector>

my_bar.xml(LayerDrawable资源,包含一个Drawable对象数组,系统按索引从小到大依次从下到上绘制这些Drawable)

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background" android:drawable="@drawable/grow"/>
    <item android:id="@android:id/progress" android:drawable="@drawable/ok"/>
</layer-list>

用这个drawable定义一个拖动条

<SeekBar![这里写图片描述](https://img-blog.csdn.net/20151127162117022)
    android:id="@+id/bar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:max="100"
    android:progressDrawable="@drawable/my_bar"/>

效果如下
拖动条

my_shape.xml(ShapeDrawable资源,定义基本的几何图形,可以用作定义几何边框)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!--设置四个角的弧度-->
    <corners
        android:radius="5dp"/>
    <!--设置内填充颜色-->
    <solid android:color="#ffffff"/>
    <!--设置边框-->
    <stroke
        android:width="1px"
        android:color="@color/purple"/>
    <!--设置内边距-->
    <padding
        android:bottom="5dp"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp"/>
</shape>

效果如下
圆角矩形
my_clip.xml(ClipDrawable资源,从其他图片资源上截取一个片段,参数表示从哪里开始截取,截取方式。此Drawable有一个setLevel(int level)方法,0<= level<=10000,表示截取的区域,可以用Timer动态改变level值,达到徐徐张开得效果,也可以用ClipDrawable定义进度条)

<?xml version="1.0" encoding="utf-8"?>
<!--定义ClipDrawable资源,-->
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/shuangta"
    android:gravity="center"
    android:clipOrientation="horizontal">
</clip>
3、res/anim目录

my_anim.xml(AnimationDrawable资源,也是一种Drawable资源,代表一个动画,支持逐帧动画和补间动画,可以进行透明度、缩放、位移、旋转变换)

<?xml version="1.0" encoding="utf-8"?>
<!--定义AnimationDrawable资源,逐帧动画、补间动画(可以有透明度、缩放、位移、旋转变换)-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:duration="5000">
    <!--定义缩放变换-->
    <scale android:fromXScale="1.0"
        android:toXScale="0.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="2000"
        android:fillAfter="true"/>
    <!--定义位移变换-->
    <translate android:fromXDelta="10"
        android:toXDelta="130"
        android:fromYDelta="30"
        android:toYDelta="-80"
        android:duration="2000"/>
    <!--定义旋转变换-->
    <rotate android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"/>
</set>

//Activity中使用AnimationDrawable资源
ImageView image = (ImageView)findViewById(R.id.image);
Animation anim = AnimationUtils.loadAnimation(this, R.anim.my_anim);
anim.setFillAfter(true);//保留动画结束状态
image.startAnimation(amin);
4、res/layout目录

存放Android的layout资源,这个从第一天学Android就开始用,此处就不赘述。

5、res/menu目录

后面补充

6、res/raw目录

存了以上资源之外,Android还需要用到其他资源,比如声音、视频等,但Android没有为其提供专门的支持,这种资源属于原始资源,可以放在res/raw或assets/目录下。res/raw目录下的资源会在R中生成索引,而assets下的资源不会

二、assets目录下的原生资源

上面已经介绍了assets,此处着重于assets目录下资源的使用。

//Activity中使用assert下的资源
AssetManager am = getAssets();
try{
    AssetFileDescriptor afd = am.openFd("xuanyuanjian.mp3");
    MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setDataSource(afd.getFileDescriptor());//加载资源文件
    mediaPlayer2.prepare();
}catch(Exception e){
    e.printStackTrace();
}

总结

各种资源使用示例代码已提交到github上,地址:https://github.com/zfisll/ResourcePack.git。介绍的都是一些常用的资源,还有些不常用的没有列出。本人刚写学习写blog,如果文章层次结构不当或者内容有误,还望积极指出,在此感谢大家的支持。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值