android 開發規范 (5) - android 資源

如何自定義資源文件夾

android 的文件目錄結構都是使用默認的 gradle 中 android 這個插件的配置,其實我們可以自己去定義資源所在文件夾名和文件夾結構,實現自定義的關鍵點在于我們按照自己的習慣更改完之后,去通知 gradle 構建工具,這樣 gradle 構建工具才可以找到資源文件。

比如我們想把資源文件夾結構設計成如下:


classify_dir.png

很簡單,我們只需要我們修改所在項目或module中的 build.gradle 文件,添加如下資源文件的配置:

android {
    ...
    sourceSets {
        main {
            res.srcDirs('src/main/res', 'src/main/res_core', 'src/main/res_sub')
        }
    }
}

配置完之后,sync project 一下就成功了。


命名共性

  • android 中資源的命名都是全小寫,多個單詞之間使用 _ 連接。
  • 資源命名基本的套路是一樣的,都是 :類型名 + 模塊名 + 顏色值 / 用途,可能個別的有些差異,但是大體差不多都是這個規律

動畫資源

動畫資源文件放置:

  • 視圖動畫文件放在 res/anim/ 目錄下
  • 屬性動畫文件放在 res/animator/ 目錄下

動畫文件命名:

  • 使用全小寫 + _ 連接
  • 命名規則:模塊名 + 效果名 / 類型名 + 方位 + 效果
    例如:refresh_progress.xml、market_cart_add.xml、market_cart_remove.xml , translation_top_in
  • 動畫效果名統一規范:
名稱 說明
fade_in 淡入
fade_out 淡出
push_down_in 從下方推入
push_down_out 從下方推出
push_left 推向左方
slide_in_from_top 從頭部滑動進入
zoom_enter 變形進入
slide_in 滑動進入
shrink_to_middle 中間縮小

顏色資源

首先聲明,res/colors 中的顏色我們都應該是定義的是顏色,而不是其他,在代碼中我們知道一個類,一個方法只干一件事,那么我們在定義像顏色這些基礎資源時一樣值關心顏色這個基本的著眼點,其他的不要多做。

例如,以前我們有的人會像下面這樣做,直接在顏色列表中定義以控件為區分的單位的顏色值,這里大家慣用的寫法真的錯了,第一違背了單一性原則,第二以以控件為區分單位來設置顏色應該是在主題 style 中干的事

  <resources>
      <color name="button_foreground">#FFFFFF</color>
      <color name="button_background">#2A91BD</color>
      <color name="comment_background_inactive">#5F5F5F</color>
      <color name="comment_background_active">#939393</color>
      <color name="comment_foreground">#FFFFFF</color>
      <color name="comment_foreground_important">#FF9D2F</color>
      ...
      <color name="comment_shadow">#323232</color>

所以呢,大家一定要分清楚在什么地方干什么事。使用這種格式,會非常容易重復定義 ARGB 值,而且如果應用要改變基色的話會非常困難。同時,這些定義是跟一些環境關聯起來的,如 button 或者 comment,應該放到 style 主題列表中,而不是在 colors.xml 文件中。

相反,應該這樣做:

  <resources>

      <!-- grayscale -->
      <color name="white"     >#FFFFFF</color>
      <color name="gray_light">#DBDBDB</color>
      <color name="gray"      >#939393</color>
      <color name="gray_dark" >#5F5F5F</color>
      <color name="black"     >#323232</color>

      <!-- basic colors -->
      <color name="green">#27D34D</color>
      <color name="blue">#2A91BD</color>
      <color name="orange">#FF9D2F</color>
      <color name="red">#FF432F</color>
  </resources>

向應用設計者那里要這個調色板,名稱不需要跟 "green"、"blue" 等等相同。"brand_primary"、"brand_secondary"、"brand_negative" 這樣的名字也是完全可以接受的。像這樣規范的顏色很容易修改或重構,會使應用一共使用了多少種不同的顏色變得非常清晰。通常一個具有審美價值的 UI 來說,減少使用顏色的種類是非常重要的。

注意:如果某些顏色和主題有關,那就單獨寫一個 colors_theme.xml。


dimens 資源

像對待 colors.xml 一樣對待 dimens.xml 文件,與定義顏色調色板一樣,你同時也應該定義一個空隙間隔和字體大小的“調色板”。 一個好的例子,如下所示:

<resources>

    <!-- font sizes -->
    <dimen name="font_22">22sp</dimen>
    <dimen name="font_18">18sp</dimen>
    <dimen name="font_15">15sp</dimen>
    <dimen name="font_12">12sp</dimen>

    <!-- typical spacing between two views -->
    <dimen name="spacing_40">40dp</dimen>
    <dimen name="spacing_24">24dp</dimen>
    <dimen name="spacing_14">14dp</dimen>
    <dimen name="spacing_10">10dp</dimen>
    <dimen name="spacing_4">4dp</dimen>

    <!-- typical sizes of views -->
    <dimen name="button_height_60">60dp</dimen>
    <dimen name="button_height_40">40dp</dimen>
    <dimen name="button_height_32">32dp</dimen>

</resources>

布局時在寫 margins 和 paddings 時,你應該使用 spacing_xx 尺寸格式來布局,而不是像對待 string 字符串一樣直接寫值,像這樣規范的尺寸很容易修改或重構,會使應用所有用到的尺寸一目了然。 這樣寫會非常有感覺,會使組織和改變風格或布局非常容易。


圖片資源

  • 圖片資源文件放置:
    • res/mipmap/ 目錄下只放啟動圖標
    • res/drawable/ 目錄下放的是位圖文件,如 .png、.9.png、.jpg、.gif ,或者是 矢量圖
  • 命名規則:類型 + 模塊名 +邏輯名稱 / 顏色
    例如下表:
名稱 說明
btn_main_about.png 主頁關于按鍵
btn_back.png 返回按鍵
divider_maket_white.png 商城白色分割線
ic_edit.png 編輯圖標
bg_main.png 主頁背景
btn_red.png 紅色按鍵
btn_red_big.png 紅色大按鍵
Ic_head_small.png 小頭像圖標
bg_input.png 輸入框背景
divider_white.png 白色分割線
bg_main_head.png 主頁頭部背景
def_search_cell.png 搜索頁面默認單元圖片
ic_more_help.png 更多幫助圖標
divider_list_line.png 列表分割線
sel_search_ok.xml 搜索界面確認選擇器
shape_music_ring.xml 音樂界面環形形

選擇器:sel_btn_xx.xml,采用如下命名:

名稱 說明
sel_btn_xx 作用在 btn_xx 上的 selector
btn_xx_normal 默認狀態效果
btn_xx_pressed state_pressed 點擊效果
btn_xx_focused state_focused 聚焦效果
btn_xx_disabled state_enabled 不可用效果
btn_xx_checked state_checked 選中效果
btn_xx_selected state_selected 選中效果
btn_xx_hovered state_hovered 懸停效果
btn_xx_checkable state_checkable 可選效果
btn_xx_activated state_activated 激活效果
btn_xx_window_focused state_window_focused 窗口聚焦效果

布局資源

  • 命名規則:類型 + 模塊名 +邏輯名
    例如:
名稱 說明
activity_main.xml 主窗體
activity_main_head.xml 主窗體頭部
fragment_music.xml 音樂片段
fragment_music_player.xml 音樂片段的播放器
dialog_loading.xml 加載對話框
ppw_info.xml 信息彈窗(PopupWindow)
layout_main_song.xml 主頁歌曲列表項

另外 Google 官方的 demo 中命名:

  • UserProfileFragment / user_profile_layout
    官方的明明思路是:類型后綴, 前綴使用 業務模塊名+實現功能名,布局的使用和頁面相同的名字。這個仁者見仁,智者見智,DataBinding 聲明測 Binding 累名字就是 activity 在前的。

id 命名

  • 命名規則:控件類型 + 模塊名 + 邏輯名
    例如: btn_main_search、btn_back

菜單資源

  • 命名規則:模塊名 + 邏輯名
    例如:main_drawer.xml、navigation.xml

values 資源

values/ 資源文件下的文件都以 s 結尾,如 attrs.xml、colors.xml、dimens.xml,起作用的不是文件名稱,而是 <resources> 標簽下的各種標簽,比如 <style> 決定樣式,<color> 決定顏色,所以,可以把一個大的 xml 文件分割成多個小的文件,比如可以有多個 style 文件,如 styles.xml、styles_home.xml、styles_item_details.xml、styles_forms.xml。


strings 文字資源

  • 命名規則:控件類型 + 模塊名 + 邏輯名稱
名稱 說明
menu_main_about 主菜單按鍵文字
friend_title 好友模塊標題欄
friend_dialog_del 好友刪除提示
login_check_email 登錄驗證
dialog_title 彈出框標題
button_ok 確認鍵
loading 加載文字

styles 主題資源

主題的命名使用大駝峰命名法,推薦使用 : 控件類型名+ 模塊名 + 邏輯名

<style name="Button_Main_Search">
    <item name="android:textSize">@dimen/font_normal</item>
    <item name="android:textColor">@color/basic_black</item>
</style>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 轉自(https://github.com/Blankj/AndroidStandardDevelop) 摘要 1...
    cvmars閱讀 341評論 0 3
  • 摘要 1 前言 2 AS 規范 3 命名規范 4 代碼樣式規范 5 資源文件規范 6 版本統一規范 7 第三方庫規...
    Blankj閱讀 42,357評論 21 314
  • title: Android開發規范 摘要 1 前言 2 命名規范 3 資源文件規范 4 版本統一規范 5 第三方...
    大白棧閱讀 1,219評論 0 16
  • 1 背景 不能只分析源碼呀,分析的同時也要整理歸納基礎知識,剛好有人微博私信讓全面說說Android的動畫,所以今...
    未聞椛洺閱讀 2,750評論 0 10
  • 聲明:本人約束黨, 約束內容不講解,直接看代碼部分 最近整理一下 **之前的關于 自動布局cell 的文章的地址...
    json_jie閱讀 257評論 0 0