如何自定義資源文件夾
android 的文件目錄結構都是使用默認的 gradle 中 android 這個插件的配置,其實我們可以自己去定義資源所在文件夾名和文件夾結構,實現自定義的關鍵點在于我們按照自己的習慣更改完之后,去通知 gradle 構建工具,這樣 gradle 構建工具才可以找到資源文件。
比如我們想把資源文件夾結構設計成如下:
很簡單,我們只需要我們修改所在項目或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>