Android开发(2): Android 资源

个人笔记整理

Android 资源

Android中的资源,一般分为两类:

  • 系统内置资源:Android SDK中所提供的已经定义好的资源,用户可以直接拿来使用。

  • 用户自定义资源:用户自己定义或引入的,只适用于当前应用的资源。

res目录

res目录:可以使用R类访问的资源,放到该目录下。

res子目录可以存放的资源
res/anim定义补间动画的XML文件
res/color定义不同状态下颜色列表的XML文件
res/drawable各种位图文件(png、jpg、gif、9-Patch) 可以编译成各种drawable对象的XML文件
res/mipmap应用程序Launcher图标
res/layout用户界面布局文件
res/menu菜单资源布局文件(选择菜单、子菜单、上下文菜单)
res/raw任意类型的原生资源
res/values各种简单值的XML文件(包括字符串、整数、数组、尺寸等)
res/xml其它任意的XML文件(可能没有特殊意义的XML文件)

在Android中使用res目录下资源或系统内置资源:

  • 在其它资源文件中使用资源:
    • 使用res目录下资源:@[<pack_name>:]res_type>/<res_name>
    • 使用系统内置资源:@android:<res_type>/<res_name>
  • 在Java代码中使用资源:(使用资源的标识符)
    • 使用res目录下资源:[<pack_name>.]R.res_type.res_name
    • 使用系统内置资源: android.R.res_type.res_name

getResources()使用

Resources res = getResources();
String appName = res.getString(R.string.app_name);
Drawable drawable 
        = res.getDrawable(R.drawable.ic_launcher);
res/values
res/values/String.xml
<resources>
    <string name="app_name">HelloWorld</string>
    <string name="user_name">张三</string>
</resources>
res/values/colors.xml
<resources>
    <color name="colorPrimary">#3F51B5</color>
</resources>
res/values/dimens.xml
<resources>
    <dimen name="view_length">100dp</dimen>
</resources>
res/values/array.xml

Array资源可以分为三类:

  • string-array:字符串组成的数组形式。
  • integer-array:int型数据组成的数组形式。
  • array:一般数组形式(数据元素类型不限)。
<resources>
    <string-array name="user_name">
        <item>张三</item>
        <item>李四</item>
    </string-array>
    <integer-array name="age">
        <item>18</item>
        <item>20</item>
    </integer-array>
    <array name="pic">
        <item>@drawable/user1</item>
        <item>@drawable/user2</item>
    </array>
</resources>

java代码中使用

Resources res = getResources();
String[] userName = res.getStringArray(R.array.user_name);
int[] age = res.getIntArray(R.array.age);
TypedArray userPic = res.obtainTypedArray(R.array.pic);
//对于TypedArray类型,需要先获得其TypedArray对象,然后再从该对象中依次获得指定下标的元素。

Drawable firstPic = userPic.getDrawable(0);
res/values/style

Style资源可以设置layout视图组件中某一个视图元素的样式;该资源文件位于res/values目录下,文件名自定义

<resources>
    <style name="CustomText">
        <item name="android:textSize">20sp</item>
        <item name="android:textColor">#FF4081</item>
    </style>
</resources>

<style>元素中parent属性表明该样式继承的父级元素样式。

在布局控件中使用该style

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    style="@style/CustomText" />
res/values/theme

Theme资源可以设置Activity窗口的样式;该资源文件位于res/values/目录下,文件名自定义。

  • Theme资源对某个Activity或整个Application起作用,而不是单独的视图组件。
  • Theme主题主要用来设置应用窗口的特征信息(如窗口标题、窗口背景、窗口边框等)。

Theme资源的使用需要从两个角度考虑:

  • 在res/values/目录中定义主题资源文件。
  • 在AndroidManifest.xml文件或Activity中为整个Activity或整个Application应用主题
<resources>
    <style name="CustomTheme" parent="AppTheme">
        <item name="windowNoTitle">true</item>
        <item name="android:colorBackground">
                     @color/custom_theme_color</item>
    </style>
</resources>

为应用程序应用主题:

  • 在AndroidManifest.xml文件静态绑定:
    • 可以为<application>元素添加 android:theme属性,属性值即为用户刚才所设计的theme资源(@style/CustomTheme )。
    • 可以为<activity>元素添加 android:theme属性,属性值即为用户刚才所设计的theme资源(@style/CustomTheme )。
  • 在Activity文件中动态绑定主题:
    • 使用Activity类的setTheme( R.style.CustomTheme )方法。
    • 该方法必须在setContentView( )方法或getLayoutInflate( ).inflate( )方法之前被调用。
res/mipmap/

在res/目录下默认情况有六个mipmap子目录。

  • res/mipmap-anydpi-v26 : API26及以上使用自适应图标
  • res/mipmap-mdpi: 中分辨率图标
  • res/mipmap-hdpi、mipmap-xhdpi、mipmap-xxhdpi、mipmap-xxxhdpi: 高分辨率图标

这六个子目录中的图片名可以完全相同,Android应用会根据用户设备分辨率的不同而自行选择。

res/drawable/
类型描述
Bitmap File图片文件资源
9-patch File基于适应内容而自动伸缩的图片(扩展名是 .9.png)
Layer List一个XML文件,管理一系列图片资源的特殊资源
State List一个XML文件,针对视图控件不同状态而设置的特殊drawable类型
Level List一个XML文件,根据视图控件不同等级而现实不同的drawable资源
Shape Drawable一个XML文件,定义包含颜色和渐变的几何图形
Scale Drawable一个XML文件,根据当前对准值作相应的平铺处理
Transition Drawable一个XML文件,用两张图片形成一个渐变效果的drawable资源
res/xml/

在res/xml/目录下的XML文件为任意规范的XML文档,这些文档没有其它附加意义,仅仅是存储数据或展示数据。

这些XML文档,不能在其它XML资源中引用。

在Activity中,可以使用Resources对象的getXML()方法,加载到内置的XML解析器中,以方便处理。

该类资源的一个典型应用是:存储应用中使用到的配置信息。

res/raw/

res/raw/目录存储任意原始格式的文件(可能为.txt、.mp3、.flv等等)。

该目录下的文件,一般不能使用在其它XML资源中。

该目录中的文件,同样会被R类所索引;因此在Activity中可以使用R.raw.***方式引用资源;通过Resources对象的openRawResource()方法,可以获得原始对象的输入流,以方便后续使用。

Assets目录

assets目录:无法直接访问的原生资源(只能通过AssetManager来处理)。

Android Studio创建的项目中,默认不包含assets目录,需要手动创建。在res同级目录创建assets目录

  • assets目录中可以建立子目录,建立更灵活的目录结构。
  • assets目录中的文件格式是任意的,不一定必须是XML文件。
  • assets/目录下文件不会被R类索引,即assets/目录下资源不能使用Resources对象获取。
  • assets/目录下资源不会被打包到APK中,即assets目录中适合存放过大的文件。
  • assets目录下的资源不会被R类处理,因此不能使用res目录下资源的访问方式来访问。
  • 在Java代码中,一般是通过getAssets( )方法获得AssetManager对象,然后再加载指定资源,处理该资源。
AssetManager assetManager = getAssets();
try {
    InputStream is = assetManager.open("test.txt");
} catch (IOException e) {
    e.printStackTrace();
}

在Android中使用assets目录下资源:

  • AssetManager对象中的常用方法:

    方法名描述
    String[] list(String path)返回path目录下所有文件组成的字符串数组形式(若path为空,则表示assets目录)
    InputStream open(String filename)打开指定fileName表示的文件流,返回该输入流
    XmlResourceParser openXmlResourceParser(String filename)从assets目录下的fileName文件中加载XML解析器
    void close()关闭当前AssetManager对象
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Forgo7ten

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值