目录

一、先明确:资源的分类与存放目录

二、XML 文件中引用资源(最常用)

三、Java/Kotlin 代码中引用资源

四、关键注意事项(避免 90% 的资源引用错误)

总结


在 Android 项目中,资源文件(如图片、字符串、布局、颜色等)的引用需要遵循固定规则,否则会出现 “资源找不到” 等编译错误。以下是正确引用资源文件的详细方法,涵盖 XML 布局、代码(Java/Kotlin)及常见注意事项。

一、先明确:资源的分类与存放目录

Android 的资源文件统一放在 app/src/main/res/ 目录下,不同类型的资源有专属子目录,引用时需对应目录类型。常见资源类型及目录:

资源类型 存放目录 用途示例 引用前缀(XML / 代码)
图片(位图) res/drawable-xxx/ 按钮背景、ImageView 图片等 @drawable/ / R.drawable.
应用图标 res/mipmap-xxx/ 应用桌面图标 @mipmap/ / R.mipmap.
布局文件 res/layout/ 界面布局(如 activity_main.xml) @layout/ / R.layout.
字符串 res/values/strings.xml 文本内容(如按钮文字) @string/ / R.string.
颜色 res/values/colors.xml 颜色值(如 #FF0000) @color/ / R.color.
尺寸 res/values/dimens.xml 尺寸值(如 16dp) @dimen/ / R.dimen.
样式 / 主题 res/values/styles.xml 控件样式、应用主题 @style/ / R.style.

二、XML 文件中引用资源(最常用)

在布局文件(如activity_main.xml)、样式文件(styles.xml)等 XML 中引用资源,格式为:@[资源类型]/[资源名称]

示例:

  1. 引用图片资源(如drawablemipmap中的图片):

    xml

    <!-- ImageView引用drawable目录下的icon.png -->
    <ImageView
        android:src="@drawable/icon"  <!-- 无需写后缀(.png/.jpg) -->
        ... />
    
    <!-- 应用图标引用mipmap目录下的app_icon.png -->
    <ImageView
        android:src="@mipmap/app_icon"
        ... />
    
  2. 引用字符串资源strings.xml中定义的文本):

    xml

    <!-- strings.xml中定义:<string name="hello">你好</string> -->
    <TextView
        android:text="@string/hello"  <!-- 直接引用name属性值 -->
        ... />
    
  3. 引用颜色资源colors.xml中定义的颜色):

    xml

    <!-- colors.xml中定义:<color name="red">#FF0000</color> -->
    <TextView
        android:textColor="@color/red"
        android:background="@color/red"
        ... />
    
  4. 引用布局资源(如复用另一个布局):

    xml

    <!-- 引用layout目录下的item_list.xml布局 -->
    <include layout="@layout/item_list" />
    

三、Java/Kotlin 代码中引用资源

在代码中引用资源,需通过 R类 访问,格式为:R.[资源类型].[资源名称]

示例:

  1. 引用图片资源

    kotlin

    // Kotlin:给ImageView设置drawable目录下的icon.png
    imageView.setImageResource(R.drawable.icon)
    
    // 引用mipmap目录下的app_icon.png
    imageView.setImageResource(R.mipmap.app_icon)
    

    java

    运行

    // Java:同上
    imageView.setImageResource(R.drawable.icon);
    
  2. 引用字符串资源

    kotlin

    // Kotlin:获取strings.xml中name为"hello"的文本
    val text = getString(R.string.hello)  // 需在有上下文(Context)的地方调用
    textView.text = text
    
  3. 引用颜色资源

    kotlin

    // Kotlin:获取colors.xml中name为"red"的颜色
    val color = ContextCompat.getColor(context, R.color.red)  // 需上下文
    textView.setTextColor(color)
    
  4. 引用布局资源(如启动 Activity 时设置布局):

    kotlin

    // Kotlin:在Activity中设置布局为activity_main.xml
    setContentView(R.layout.activity_main)
    

四、关键注意事项(避免 90% 的资源引用错误)

  1. 资源名称严格遵循命名规则

    • 只能包含 小写字母(a-z)、数字(0-9)、下划线(_),不能有大写字母、空格、中文或特殊字符(如@#)。
    • 不能以数字开头(如123_icon是错误的,应改为icon_123)。
    • 示例:正确名称user_head.png,错误名称UserHead.png(大写)、user head.png(空格)。
  2. 资源类型与存放目录必须匹配

    • 放在drawable目录的图片,必须用@drawable/R.drawable.引用(不能用@mipmap/)。
    • 放在mipmap目录的图标,必须用@mipmap/R.mipmap.引用(mipmap专为应用图标设计,优先用它存图标)。
  3. 无需指定资源的密度目录

    • 例如drawable-hdpi/icon.pngdrawable-xhdpi/icon.png,引用时只需写@drawable/icon,Android 会根据设备分辨率自动选择合适的密度版本。
  4. 引用系统资源的特殊格式:若需引用 Android 系统自带的资源(如系统样式、图标),需加android:前缀:

    xml

    <!-- 引用系统自带的返回图标 -->
    <ImageView
        android:src="@android:drawable/ic_menu_back" />
    
    <!-- 引用系统主题中的颜色 -->
    <TextView
        android:textColor="@android:color/black" />
    
  5. 通过主题属性引用(动态资源):若资源依赖当前应用主题(如colorPrimary),用?attr/前缀(而非@):

    xml

    <!-- 引用主题中定义的colorPrimary颜色(随主题变化) -->
    <TextView
        android:background="?attr/colorPrimary" />
    
  6. 及时清理缓存:若资源已存在但仍提示 “找不到”,可能是 IDE 缓存问题:

    • 点击 Android Studio 菜单栏 Build → Clean Project,再 Build → Rebuild Project

总结

正确引用资源的核心是:“资源类型对应目录、名称符合规则、引用格式匹配(XML 用 @,代码用 R)”。遵循以上规则,可大幅减少 “资源找不到”“资源链接失败” 等编译错误。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐