Android - 资源文件

本文详细介绍了Android应用开发中各种资源文件的使用方法,包括不同类型的动画、字符串数组、自定义属性、颜色、尺寸、字符串、样式等内容。同时,还讲解了如何在代码中引用这些资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

推荐阅读:Android studio的文件创建

res/anim:定义补间动画
res/animator:定义属性动画
res/drawable目录下:可定义帧动画、shape、selector、和图片
res/values目录下:可创建

arrays(字符串数组)、
attrs(自定义view的属性)、
colors(颜色)、
demens(尺寸)、
strings(字符串)、
styles(主题或布局参数)。

res/menu:定义菜单
res/raw:存放音乐、视频等
assets:注意不在res目录下,且与java、res、manifests同等级。

这里写图片描述

这里写图片描述

动画的定义

推荐阅读: 属性动画

1、res/anim:补间动画

1、定义:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:fromXScale="1.0"
        android:toXScale="0.5"
        android:fromYScale="1.0"
        android:toYScale="0.5"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="500" />

    <alpha
        android:interpolator="@android:anim/accelerate_interpolator"
        android:fromAlpha="1.0"
        android:toAlpha="0.0"
        android:duration="500" />
</set>

这里写图片描述

2、引用:

Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim);
tv.setAnimation(animation);

2、res/drawable:帧动画

1、定义

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item
        android:drawable="@mipmap/pull_end_image_frame_01"
        android:duration="100" />
    <item
        android:drawable="@mipmap/pull_end_image_frame_02"
        android:duration="100" />
    <item
        android:drawable="@mipmap/pull_end_image_frame_03"
        android:duration="100" />
    <item
        android:drawable="@mipmap/pull_end_image_frame_04"
        android:duration="100" />
    <item
        android:drawable="@mipmap/pull_end_image_frame_05"
        android:duration="100" />
</animation-list>

这里写图片描述

2、引用

/*  res/drawable 目录下的帧动画  */
tv.setBackgroundResource(R.drawable.animation_refresh_second);
AnimationDrawable animationDrawable = (AnimationDrawable) tv.getBackground();
animationDrawable.start();//开始播放

if (animationDrawable != null && animationDrawable.isRunning()) {
   animationDrawable.stop(); //停止播放
}

3、res/animator : 属性动画

1、定义

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">

    <objectAnimator
        android:duration="2000"
        android:propertyName="translationX"
        android:valueFrom="-500"
        android:valueTo="0"
        android:valueType="floatType" />

    <set android:ordering="together">
        <objectAnimator
            android:duration="3000"
            android:propertyName="rotation"
            android:valueFrom="0"
            android:valueTo="360"
            android:valueType="floatType" />

        <set android:ordering="sequentially">
            <objectAnimator
                android:duration="1500"
                android:propertyName="alpha"
                android:valueFrom="1"
                android:valueTo="0"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="1500"
                android:propertyName="alpha"
                android:valueFrom="0"
                android:valueTo="1"
                android:valueType="floatType" />
        </set>
    </set>

</set> 

这里写图片描述

2、使用

       Animator animator = AnimatorInflater.loadAnimator(this, R.animator.animator);
        animator.setTarget(tv);
        animator.start();

属性动画一般在代码中设置,如下:

        AnimatorSet set = new AnimatorSet();

        //平移
        ObjectAnimator anim1 = ObjectAnimator.ofFloat(tv, "translationX", -500f, 0f);
        anim1.setDuration(2000);
        ObjectAnimator anim2 = ObjectAnimator.ofFloat(tv, "translationY", 0f, -500f);
        anim2.setDuration(2000);
        //透明度
        ObjectAnimator anim3 = ObjectAnimator.ofFloat(tv, "alpha", 1f, 0f);//逐渐消失
        anim3.setDuration(2000);
        //旋转
        ObjectAnimator anim4 = ObjectAnimator.ofFloat(tv, "rotationX", 180f, 0f);
        anim4.setDuration(2000);
        ObjectAnimator anim5 = ObjectAnimator.ofFloat(tv, "rotationY", 0f, 180f);
        anim5.setDuration(2000);
        //缩放
        ObjectAnimator anim6 = ObjectAnimator.ofFloat(tv, "scaleX", 0.5f);//x轴缩小一半
        anim6.setDuration(1000);
        ObjectAnimator anim7 = ObjectAnimator.ofFloat(tv, "scaleY", 0.5f);//y轴缩小一半
        anim7.setDuration(1000);

        set.play(anim1).before(anim2);
        set.play(anim3).before(anim4);
        set.play(anim5).before(anim6);
        set.play(anim1).before(anim7);
        set.start();

res/value/XXX

1、res/value/arrays:字符串数组

推荐阅读:Android:entries的使用

1、定义

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="week_day">
        <item>周日</item>
        <item>周一</item>
        <item>周二</item>
        <item>周三</item>
        <item>周四</item>
        <item>周五</item>
        <item>周六</item>
    </string-array>

</resources>

2、引用

/*  res/value/arrays 目录下 */
String[] items = getResources().getStringArray(R.array.week_day);

2、res/value/attrs:自定义view的自定义属性

1、定义

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--自定义属性-->
    <declare-styleable name="TagFlowLayout">
        <attr name="auto_select_effect" format="boolean"></attr>
        <attr name="max_select" format="integer"></attr>
        <attr name="gravity">
            <enum name="left" value="-1" />
            <enum name="center" value="0" />
            <enum name="right" value="1" />
        </attr>
    </declare-styleable>

</resources>

2、引用:自定义view的构造方法中

   public TagFlowLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        //读取attrs中资源
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TagFlowLayout);

        //第一个参数,读取attrs中参数名,是以“样式名_参数名”的形式。
        //第二个参数,是默认值,如果从xml中获取不到则使用默认值。
        mAutoSelectEffect = ta.getBoolean(R.styleable.TagFlowLayout_auto_select_effect, true);

        //TypedArray 通常最后调用 .recycle() 方法,为了保持以后使用该属性一致性
        ta.recycle();
    }

3、res/value/colors:颜色

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
</resources>

4、res/value/dimens:尺寸

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="padding_small">8dp</dimen>
    <dimen name="padding_medium">8dp</dimen>
    <dimen name="padding_large">16dp</dimen>
</resources>

5、res/value/strings :字符串

<resources>
    <string name="app_name">MyResource</string>

    <!-- 下载新版app -->
    <string name="download_percent">下载:&amp;lt;font color="#ff0000"&amp;gt;%1$s&amp;lt;/font&amp;gt;%%</string>
    <!-- 注册 -->
    <string name="str_register_now">我要注册</string>
    <string name="str_register_now2">立即注册</string>
</resources>

6、res/value/styles:自定义APP的主题,或布局参数

<resources>

    <!--定义APP主题-->
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <!--定义布局参数-->
    <style name="text_white_8">
        <item name="android:textColor">#ffffff</item>
        <item name="android:textSize">8dp</item>
    </style>

    <style name="text_white_10">
        <item name="android:textColor">#ffffff</item>
        <item name="android:textSize">10dp</item>
    </style>

</resources>

res/value下的引用:

res/value根节点都是resource

/*  res/value/colors 目录下 */
int colors = R.color.colorAccent;

/*  res/value/dimens 目录下 */
int dimens = R.dimen.padding_small;

/*  res/value/strings 目录下 */
int strings = R.string.app_name;

/*  res/value/styles 目录下 */
int styles = R.style.AppTheme;

res/drawable:定义shape或selector

推荐阅读:Android - shape 使用

定义:

normal_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#21BF64" />
    <corners android:radius="30dp" />
    <padding
        android:bottom="2dp"
        android:left="10dp"
        android:right="10dp"
        android:top="2dp" />

</shape>

checked_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#FFFFFF" />
    <corners android:radius="30dp" />
    <padding
        android:bottom="2dp"
        android:left="10dp"
        android:right="10dp"
        android:top="2dp" />
</shape>

btn_login_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/checked_bg" android:state_focused="true"></item>
    <item android:drawable="@drawable/checked_bg" android:state_pressed="true"></item>
    <item android:drawable="@drawable/normal_bg"></item>
</selector>

使用:设置背景

//xml中
android:background="@drawable/normal_bg"
//或
android:background="@drawable/btn_login_selector"

//代码中
tv.setBackgroundResource(R.drawable.normal_bg);
//或
tv.setBackgroundResource(R.drawable.btn_login_selector);

res/raw:

raw属于隐藏文件夹,他放的是图片、音乐等资源(可以直接复制到设备中,不会被编译,并且不会被自动压缩,他会在R.java中生成对应的唯一ID);它区别于assets文件夹,assets文件夹用于存放需要打包到应用程序的静态文件,给文件夹下的文件不会被影射到R.java中(即不会生成对应的id)

引用:

InputStream is = getResources().openRawResource(R.raw.refresh_logo);

assets:

AssetManager am = null;  
am = getAssets();  
InputStream is = am.open("filename");  

res/raw和assets的相同点:

1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。

res/raw和assets的不同点:

1.res/raw中的文件会被映射到R.Java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值