导读:本期聚焦于弦宿​创作的《Android res目录下layout、drawable、values三大资源目录详解》,敬请观看详情。Android项目工程中的res目录承载着几乎所有的界面与配置资源,其中layout、drawable、values三个子目录最常被开发者接触,也最容易混淆。layout目录负责存放界面布局文件,按限定符可以适配不同屏幕尺寸;drawable目录管理图片与形状、选择器等XML绘制的图形资源;values目录则集中存放字符串、颜色、尺寸、样式、数组等键值型资源。本文将围绕这三个目录展开,详细介绍每个目录的文件组织规则、常用标签写法、屏幕适配限定符的命名方式,以及在代码或其他XML中引用这些资源的正确姿势,并附上典型代码示例,帮助你理清资源体系,减少编译报错和资源找不到的问题。

刚接触Android开发的人打开一个工程,通常最先注意到的就是res目录。这个目录下密密麻麻的子文件夹,比如layout、drawable、values、mipmap、menu等,各自承担着不同的职责。其中使用频率最高的当属layout、drawable和values这三个目录,它们分别对应界面布局、图形资源和键值型资源。理解这三个目录的定位、命名规则和引用方式,是写好Android界面的基础,也能避免大量诸如R.id找不到资源编译失败之类的常见问题。

Android res目录下layout、drawable、values三大资源目录详解

layout目录:界面布局的家

layout目录用来存放所有描述界面结构的XML文件,每一个XML对应一个可以被setContentView()加载的布局。系统在编译时会为每个布局文件生成一个整数ID,例如res/layout/activity_main.xml会对应R.layout.activity_main。布局文件的根节点可以是各种ViewGroup,比如LinearLayout、ConstraintLayout、FrameLayout等,内部再嵌套具体的控件。

layout目录还支持屏幕适配的限定符命名。比如layout-land表示横屏时优先加载的布局,layout-sw600dp表示最小宽度为600dp的平板设备优先加载的布局,layout-xhdpi则针对超高密度屏幕。运行时系统会根据设备的实际配置,自动选择最匹配的目录中的文件。这种机制让同一套代码可以适配不同形态的设备,而不需要写任何判断逻辑。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/app_title" />

    <Button
        android:id="@+id/btn_confirm"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_bg"
        android:text="@string/btn_confirm_text" />
</LinearLayout>

在代码中加载布局使用setContentView(R.layout.activity_main),在Activity中获取控件则调用findViewById(R.id.tv_title)。需要注意布局文件名只能包含小写字母、数字和下划线,否则编译阶段就会直接报错。

drawable目录:不止是放图片

很多初学者以为drawable目录就是单纯存图片的地方,实际上它的能力远不止于此。drawable目录可以存放PNG、JPG、WebP等位图文件,也可以存放shape、selector、layer-list等用XML定义的图形资源。用XML画图的好处是体积小、可以随意缩放而不失真,改颜色只需要改一个十六进制值。

shape标签是最常用的绘制方式之一,可以定义圆角矩形、实心颜色、描边和渐变。selector则用于定义状态相关的图形,比如按钮按下时变色、松开后恢复。下面的例子把两者结合起来,先定义一个圆角背景,再定义一个按下变色的选择器。

<!-- res/drawable/shape_btn_bg.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#3F51B5" />
    <corners android:radius="8dp" />
</shape>

<!-- res/drawable/selector_btn.xml -->
&ltlt;selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/shape_btn_pressed" />
    <item android:drawable="@drawable/shape_btn_bg" />
</selector>

drawable同样支持密度限定符,如drawable-hdpidrawable-xhdpidrawable-xxhdpi,用于为不同屏幕密度提供不同分辨率的同名图片。如果只在一个默认目录中放一张图,系统在其他密度设备上会自动缩放,可能带来模糊或内存浪费。引用方式在XML中是@drawable/文件名,在代码中是R.drawable.文件名,文件名同样必须符合小写字母加下划线的规则。

values目录:集中管理可复用的配置值

values目录存放的是键值对形式的资源,常见的文件有strings.xml、colors.xml、dimens.xml、styles.xml、arrays.xml等。把这些硬编码的值集中管理,一方面方便统一修改,另一方面是实现多语言适配的基础。比如字符串全部写在strings.xml中,只需要再建一个values-zhvalues-en目录放对应语言的同名文件,系统就会根据设备语言自动切换。

colors.xml管理颜色值,dimens.xml管理尺寸,styles.xml和themes.xml管理样式与主题。样式可以把一组属性打包复用,主题则是应用到整个Activity或Application的样式。下面的示例展示了这几个文件的典型写法。

<!-- res/values/strings.xml -->
<resources>
    <string name="app_title">资源目录示例</string>
    <string name="btn_confirm_text">确 定</string>
</resources>

<!-- res/values/colors.xml -->
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorWhite">#FFFFFF</color>
</resources>

<!-- res/values/dimens.xml -->
<resources>
    <dimen name="page_padding">16dp</dimen>
</resources>

<!-- res/values/styles.xml -->
<resources>
    <style name="CommonButton" parent="Widget.AppCompat.Button">
        <item name="android:textColor">@color/colorWhite</item>
        <item name="android:textSize">14sp</item>
    </style>
</resources>

引用values资源时,字符串用@string/xxx,颜色用@color/xxx,尺寸用@dimen/xxx,样式用@style/xxx。在代码中则分别对应R.string.xxxR.color.xxx等常量。值得强调的一点是,values目录下的文件名并不重要,资源真正的标识是name属性,理论上你把所有字符串塞进一个自定义文件也能正常编译,但为了可维护性,建议按约定分文件存放。

三个目录的协作关系与常见坑

实际开发中这三个目录是紧密配合的。一个按钮的完整外观,往往由layout中的位置尺寸、drawable中的背景图形、values中的文字和颜色共同决定。把它们拆分开的思路贯穿了Android整个资源体系:结构与样式分离、内容与配置分离。

常见的坑有几种。一是资源重名冲突,不同限定符目录下的同名文件是允许的,这正是适配机制的核心,但同一目录下两个文件资源名相同就会编译失败。二是引用了不存在的资源,比如XML里写了@drawable/icon但图片已经删除,这类错误在编译期就能暴露,但如果是动态拼接资源名再用getIdentifier()查找,就会在运行时返回0,排查起来更麻烦。三是把图片错放进mipmap目录之外又混淆使用,mipmap一般只用于启动器图标,普通图片应放在drawable下。

掌握layout、drawable、values三个目录的职责边界和引用规则之后,再去理解mipmap、menu、anim等其他资源目录就会轻松很多。整个res体系的设计哲学其实是一致的:用限定符目录做适配,用统一的引用语法做解耦,让资源管理和业务代码彻底分离。

Android资源目录layout布局drawable图片资源values资源文件修改时间:2026-09-11 14:51:35

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260911/54726.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。