如果你展开res目录看一下,其实里面的东西还是挺多的,很容易让人看得眼花缭乱,入下图所示:
看到这么多的子目录也不用害怕,其实归纳一下,res目录中的内容就变得非常简单了。
- 所有以“
drawable”开头的目录都是用来放图片的, - 所有以“
mipmap”开头的目录都是用来放应用图标的, - 所有以“
values”开头的目录都是用来放字符串、样式、颜色等配置的, - 所有以“
layout”开头的目录都是用来放布局文件的。
怎么样,是不是突然感觉清晰了很多?
之所以有这么多“mipmap”开头的目录,其实主要是为了让程序能够更好地兼容各种设备。drawable目录也是相同的道理,虽然Android Studio没有帮我们自动生成,但是我们应该自己创建drawable-hdpi、drawable-xhdpi、drawable-xxhdpi等目录。在制作程序的时候,最好能够给同一张图片提供几个不同分辨率的版本,分别放在这些目录下,然后程序运行的时候,会自动根据当前运行设备分辨率的高低选择加载哪个目录下的图片。当然这只是理想情况,更多的时候美工只会提供给我们一份图片,这时你把所有图片都放在drawable-xxhdpi目录下就好了,因为这是最主流的设备分辨率目录。
知道了res目录下每个子目录的含义,我们再来看一下如何使用这些资源吧。打开
res/values/strings.xml文件,其内容如下:(就不截图了)
<resources>
<string name="app_name">Hello world123</string>
</resources>
可以看到,这里定义了一个应用程序名的字符串,我们有以下两种方式来引用它。
- 在代码中通过R.string.app_name可以获得该字符串的引用。
- 在XML中通过@string/app_name可以获得该字符串的引用。 基本的语法就是上面这两种方式,其中string部分是可以替换的,如果是引用的图片资源就可以替换成drawable,如果是引用的应用图标就可以替换成mipmap,如果是引用的布文件就可以替换成layout,以此类推。
下面举一个简单的例子来帮助你理解,打开AndroidManifest.xml文件,找到如下代码:
- HelloWorld项目的应用图标就是通过android:icon属性指定的
- 应用的名称则是通过android:label属性指定的。
可以看到,这里对资源引用的方式正是我们刚刚学的在XML中引用资源的语法。