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对象

热门文章

暂无图片
编程学习 ·

C语言二分查找详解

二分查找是一种知名度很高的查找算法&#xff0c;在对有序数列进行查找时效率远高于传统的顺序查找。 下面这张动图对比了二者的效率差距。 二分查找的基本思想就是通过把目标数和当前数列的中间数进行比较&#xff0c;从而确定目标数是在中间数的左边还是右边&#xff0c;将查…
暂无图片
编程学习 ·

GMX 命令分类列表

建模和计算操作命令&#xff1a; 1.1 . 创建拓扑与坐标文件 gmx editconf - 编辑模拟盒子以及写入子组(subgroups) gmx protonate - 结构质子化 gmx x2top - 根据坐标生成原始拓扑文件 gmx solvate - 体系溶剂化 gmx insert-molecules - 将分子插入已有空位 gmx genconf - 增加…
暂无图片
编程学习 ·

一文高效回顾研究生课程《数值分析》重点

数值分析这门课的本质就是用离散的已知点去估计整体&#xff0c;就是由黑盒子产生的结果去估计这个黑盒子。在数学里这个黑盒子就是一个函数嘛&#xff0c;这门课会介绍许多方法去利用离散点最大化地逼近这个函数&#xff0c;甚至它的导数、积分&#xff0c;甚至微分方程的解。…
暂无图片
编程学习 ·

在职阿里5年,一个28岁女软测工程师的心声

简单的先说一下&#xff0c;坐标杭州&#xff0c;14届本科毕业&#xff0c;算上年前在阿里巴巴的面试&#xff0c;一共有面试了有6家公司&#xff08;因为不想请假&#xff0c;因此只是每个晚上去其他公司面试&#xff0c;所以面试的公司比较少&#xff09; ​ 编辑切换为居中…
暂无图片
编程学习 ·

字符串左旋c语言

目录 题目&#xff1a; 解题思路&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 总代码&#xff1a; 题目&#xff1a; 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字符得到BCDA ABCD左旋两个字符…
暂无图片
编程学习 ·

设计模式--观察者模式笔记

模式的定义与特点 观察者&#xff08;Observer&#xff09;模式的定义&#xff1a;指多个对象间存在一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式&#xf…
暂无图片
编程学习 ·

睡觉突然身体动不了,什么是睡眠痽痪症

很多朋友可能有这样的体验&#xff0c;睡觉过程中突然意识清醒&#xff0c;身体却动弹不了。这时候感觉非常恐怖&#xff0c;希望旁边有一个人推自己一下。阳光以前也经常会碰到这样的情况&#xff0c;一年有一百多次&#xff0c;那时候很害怕晚上到来&#xff0c;睡觉了就会出…
暂无图片
编程学习 ·

深入理解C++智能指针——浅析MSVC源码

文章目录unique_ptrshared_ptr 与 weak_ptrstd::bad_weak_ptr 异常std::enable_shared_from_thisunique_ptr unique_ptr 是一个只移型别&#xff08;move-only type&#xff0c;只移型别还有std::mutex等&#xff09;。 结合一下工厂模式&#xff0c;看看其基本用法&#xff…
暂无图片
编程学习 ·

@TableField(exist = false)

TableField(exist false) //申明此字段不在数据库存在&#xff0c;但代码中需要用到它&#xff0c;通知Mybatis-plus在做写库操作是忽略它。,.
暂无图片
编程学习 ·

Java Web day15

第十二章文件上传和下载 一、如何实现文件上传 要实现Web开发中的文件上传功能&#xff0c;通常需要完成两步操作&#xff1a;一.是在Web页面中添加上传输入项&#xff1b;二是在Servlet中读取上传文件的数据&#xff0c;并保存到本地硬盘中。 需要使用一个Apache组织提供一个…
暂无图片
编程学习 ·

【51nod 2478】【单调栈】【前缀和】小b接水

小b接水题目解题思路Code51nod 2478 小b接水 题目 输入样例 12 0 1 0 2 1 0 1 3 2 1 2 1输出样例 6解题思路 可以发现最后能拦住水的都是向两边递减高度&#xff08;&#xff1f;&#xff09; 不管两个高积木之间的的积木是怎样乱七八糟的高度&#xff0c;最后能用来装水的…
暂无图片
编程学习 ·

花了大半天写了一个UVC扩展单元调试工具

基于DIRECTSHOW 实现的&#xff0c;用的是MFC VS2019. 详见&#xff1a;http://www.usbzh.com/article/detail-761.html 获取方法 加QQ群:952873936&#xff0c;然后在群文件\USB调试工具&测试软件\UVCXU-V1.0(UVC扩展单元调试工具-USB中文网官方版).exe USB中文网 USB中文…
暂无图片
编程学习 ·

贪心(一):区间问题、Huffman树

区间问题 例题一&#xff1a;区间选点 给定 N 个闭区间 [ai,bi]请你在数轴上选择尽量少的点&#xff0c;使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第一行包含整数 N&#xff0c;表示区间数。 接下来 …
暂无图片
编程学习 ·

C语言练习实例——费氏数列

目录 题目 解法 输出结果 题目 Fibonacci为1200年代的欧洲数学家&#xff0c;在他的着作中曾经提到&#xff1a;「若有一只免子每个月生一只小免子&#xff0c;一个月后小免子也开始生产。起初只有一只免子&#xff0c;一个月后就有两只免子&#xff0c;二个月后有三只免子…
暂无图片
编程学习 ·

零基础如何在短时间内拿到算法offer

​算法工程师是利用算法处理事物的职业 算法&#xff08;Algorithm&#xff09;是一系列解决问题的清晰指令&#xff0c;也就是说&#xff0c;能够对一定规范的输入&#xff0c;在有限时间内获得所要求的输出。 如果一个算法有缺陷&#xff0c;或不适合于某个问题&#xff0c;执…
暂无图片
编程学习 ·

人工智能:知识图谱实战总结

人工智能python&#xff0c;NLP&#xff0c;知识图谱&#xff0c;机器学习&#xff0c;深度学习人工智能&#xff1a;知识图谱实战前言一、实体建模工具Protegepython&#xff0c;NLP&#xff0c;知识图谱&#xff0c;机器学习&#xff0c;深度学习 人工智能&#xff1a;知识图…
暂无图片
编程学习 ·

【无标题】

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…
暂无图片
编程学习 ·

C语言实现扫雷游戏源代码

C语言实现扫雷游戏源代码 头文件 #define _CRT_SECURE_NO_WARNINGS //包含头文件 #include <stdio.h> #include <stdlib.h>//定义数值 #define ROW 9 #define COL 9#define ROWS ROW2 #define COLS COL2//定义雷的数量 #define mine_num 10//函数定义 //初始化 v…