首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 獲取 res/drawable 圖片資源 ID:檔名命名規範與 R 類別生成機制

     編輯:程式設計綜合問答

問題現象

在 res/drawable-hdpi 放置 85849.jpg,程式碼 R.drawable.85849 報錯 cannot be resolved to a variable。

根本原因

資源檔名必須符合 Java 識別碼命名規則:

  • 只能包含 [a-zA-Z0-9_]
  • 不能以數字開頭
  • 不能使用 Java 關鍵字

85849 以數字開頭,導致 aapt 無法在 R.java 生成合法欄位名稱。

解決方案

方案一:重新命名檔案(推薦)


// 重新命名為以字母開頭
img_85849.jpg
// 或
image_85849.jpg
// 程式碼
R.drawable.img_85849

方案二:放入 assets 目錄(不生成 R.id)


// assets/images/85849.jpg
InputStream is = getAssets().open("images/85849.jpg");
Bitmap bitmap = BitmapFactory.decodeStream(is);

優點:檔名無限制、支援子目錄、不增加 R 類別體積。缺點:無法用 R.drawable.xxx 靜態引用,打包體積稍大(不經 aapt 優化)。

方案三:raw 目錄(同 assets,但有 R.id)


// res/raw/img_85849.jpg (同樣需合法檔名)
InputStream is = getResources().openRawResource(R.raw.img_85849);

資源目錄選擇指南

目錄生成 R.id檔名限制支援子目錄編譯時優化適用場景
res/drawable-*是嚴格 (Java 識別碼)否是 (PNG 壓縮等)UI 圖片、圖示、可繪製資源
res/raw是嚴格否否 (原始封裝)JSON、XML、短音訊、字體等原始資料
assets否無 (任意合法檔名)是否大檔案、字體、資料庫種子、HTML 模板、任意命名檔案

最佳實踐

  1. 統一命名規範:snake_case、以字母開頭、語義化(如 ic_launcher.png、bg_login.jpg)。
  2. 大量/大檔案資源用 assets:避免 R 類別膨脹、編譯緩慢、APK 體積暴增。
  3. 圖片優先用 WebP:res/drawable 放 .webp,體積較 PNG/JPG 小 30%+。
  4. 密度分桶:drawable-mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi 提供對應解析度,系統自動選擇最佳匹配。

資源檔名命名規範是 Android 專案規範的基礎,養成良好習慣能避免大量莫名其妙的編譯錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved