Android 最简工程资源目录介绍
还记得我们之前创建的 HelloWorld
项目 ,本章节我们就用这个项目介绍 Android APP res 目录下的一些资源
res 目录中的所有资源文件会在 R.java
文件下生成对应的资源 id ,然后我们就可以通过 R.<资源 id>
访问这些资源文件
说到这个 res 目录,另外还有提下这个 assets 目录 ,虽然这里没有,但是我们可以自己创建,两者的区别在于是否前者下所有的资源文件都会在 R.java 文件下生成对应的资源 id,而后者并不会
- 前者我们可以直接通过资源id访问到对应的资源;
- 后者则需要通过 AssetManager 以二进制流的形式来读取
这个 R 文件可以理解为字典,res 下每个资源都都会在这里生成一个唯一的 id
接下来我们看看 res 目录下的子目录
资源名称 | 说明 |
---|---|
drawable | 存放各种位图文件,(.png,.jpg,.9png 等) 还可以是一些其它的 drawable 类型的 XML 文件 |
mipmap-hdpi | 高分辨率,一般我们把图片丢这里 |
mipmap-mdpi | 中等分辨率,很少,除非兼容的的手机很旧 |
mipmap-xhdpi | 超高分辨率 |
mipmap-xxhdpi | 超超高分辨率,这个在高端机上有所体现 |
1. mipmap-* 目录
使用 mipmap 会在图片缩放在提供一定的性能优化,分辨率不同系统会根据屏幕分辨率来选择 hdpi,mdpi,xmdpi,xxhdpi 下的对应图片
如果我们解压别人的 apk 可以看到上述目录同一名称的图片,在四个文件夹下都有,只是大小和像素不一样而已
当然,这也不是绝对的,比如我们把所有的图片都丢在了 drawable-hdpi 下的话,即使手机 本该加载 ldpi 文件夹下的图片资源,但是 ldpi 下没有,那么加载的还会是 hdpi 下的图片
如果是 hdpi ,mdpi 目录下有,ldpi 下没有,那么会加载 mdpi 中的资源
mipmap 图片资源使用的原则
最接近的密度级别
如果想禁止 Android 不跟随屏幕密度加载不同文件夹的资源,只需在 AndroidManifest.xml
文件中添加 android:anyDensity="false"
字段
2. layout (布局) 目录
layout 目录下存放的就是 APP 的布局文件
如果对一些特定的机型做屏幕适配,比如 480x320,可能会另外创建一套布局目录 layout-480x320
3. values 目录
values 目录默认有三个文件
文件 | 说明 |
---|---|
string.xml | 定义字符串资源 |
styles.xml | 定义样式资源 |
colors.xml | 定义颜色资源 |
当然了,我们还可以创建其它的资源文件
文件 | 说明 |
---|---|
demens.xml | 定义尺寸资源 |
arrays.xm | 定义数组资源 |
attrs.xml | 自定义控件时用的较多,自定义控件的属性 |
theme | 主题文件,用于改变窗口外观 |
重点说一下这个 theme 文件,跟 styles 很相似,但是会对整个应用中的 Actvitiy 或指定 Activity 起作用
可在 Java 代码中通过 setTheme() 使用,或者在 Androidmanifest.xml 中为 <application>
添加 theme 属性
其它目录
我们还可以添加其它目录,添加方法如下
-
在 res 目录上点右键,选择 New,然后选择 Android resource library
-
可以在弹出的对话框的 Resource type 中看到很多中类型,对了,不用输入 Directory name ,只要选择不同的 Resource type,就会自动输入名称的
在 Resource type 中我们可以看到其它的目录
-
memu ( 菜单 ) 目录
在以前有物理菜单按钮,即 menu 键的手机上,用的较多,现在用的并不多,菜单项相关的资源 xml 可在这里编写
-
raw 目录
用于存放各种原生资源 (音频,视频,一些 XML 文件等)
可以通过
openRawResource(int id)
来获得资源的二进制流这里面的资源也会在 R 文件那里生成一个资源 id
-
最后还有个动画的
动画有两种:属性动画和补间动画
目录名称 说明 animator 存放属性动画的 XML 文件 anim 存放补间动画的 XML 文件
如何去使用 res 目录下的资源
知道有什么资源,接下来就来了解该怎么用了
我们上面提到, 所有的资源文件都会在 R.java
文件下生成一个资源 id
我们可以通过这个资源 id 来完成资源的访问,使用情况有两种
- Java 代码中使用和
- XML 代码中使用
Java 代码中使用
-
Java 文字
txtName.setText(getResources().getText(R.string.name));
-
图片
imgIcon.setBackgroundDrawableResource(R.drawable.icon);
-
颜色
txtName.setTextColor(getResouces().getColor(R.color.red));
-
布局
setContentView(R.layout.main);
-
控件
txtName = (TextView)findViewById(R.id.txt_name);
XML 代码中使用
通过 @xxx 即可得到,比如获取文本和图片
<TextView android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background = "@drawable/img_back"/>