Android 最简工程资源目录介绍

还记得我们之前创建的 HelloWorld 项目 ,本章节我们就用这个项目介绍 Android APP res 目录下的一些资源

res 目录中的所有资源文件会在 R.java 文件下生成对应的资源 id ,然后我们就可以通过 R.<资源 id> 访问这些资源文件

说到这个 res 目录,另外还有提下这个 assets 目录 ,虽然这里没有,但是我们可以自己创建,两者的区别在于是否前者下所有的资源文件都会在 R.java 文件下生成对应的资源 id,而后者并不会

  1. 前者我们可以直接通过资源id访问到对应的资源;
  2. 后者则需要通过 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 属性

其它目录

我们还可以添加其它目录,添加方法如下

  1. res 目录上点右键,选择 New,然后选择 Android resource library

  2. 可以在弹出的对话框的 Resource type 中看到很多中类型,对了,不用输入 Directory name ,只要选择不同的 Resource type,就会自动输入名称的

Resource type 中我们可以看到其它的目录

  1. memu ( 菜单 ) 目录

    在以前有物理菜单按钮,即 menu 键的手机上,用的较多,现在用的并不多,菜单项相关的资源 xml 可在这里编写

  2. raw 目录

    用于存放各种原生资源 (音频,视频,一些 XML 文件等)

    可以通过 openRawResource(int id) 来获得资源的二进制流

    这里面的资源也会在 R 文件那里生成一个资源 id

  3. 最后还有个动画的

    动画有两种:属性动画和补间动画

    目录名称 说明
    animator 存放属性动画的 XML 文件
    anim 存放补间动画的 XML 文件

如何去使用 res 目录下的资源

知道有什么资源,接下来就来了解该怎么用了

我们上面提到, 所有的资源文件都会在 R.java 文件下生成一个资源 id

我们可以通过这个资源 id 来完成资源的访问,使用情况有两种

  1. Java 代码中使用和
  2. XML 代码中使用

Java 代码中使用

  1. Java 文字

    txtName.setText(getResources().getText(R.string.name));
    
  2. 图片

    imgIcon.setBackgroundDrawableResource(R.drawable.icon);
    
  3. 颜色

    txtName.setTextColor(getResouces().getColor(R.color.red));
    
  4. 布局

    setContentView(R.layout.main);
    
  5. 控件

    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"/>

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.