Andoird開發一種富有成效的資源文件命名規則

364599638 8年前發布 | 8K 次閱讀 安卓開發 Android開發 移動開發

你還記得最后一次在strings.xml中尋找要用的字符串嗎?還記得自己最后一次不得不瀏覽完所有的drawable才找到想要的那個圖標嗎?

每當開始一個新的項目,我們總是化太多心思到配置和架構上,但是對于資源文件的命名,你有自己的一套對策嗎?

其實你應該有才對!因為如果缺乏xml的命名規則會讓安卓資源文件的管理混亂,尤其是在大項目中。

那么就讓我們來介紹一個可以減輕你痛苦的簡單方案吧。

這篇博客將闡述其機制、好處、限制,并提供一個可隨時查閱的清單。

基本準則

所有的資源文件名稱都遵循一個簡單的約定。

我們首先簡明的描述一下每個元素。然后列舉這樣做的好處,之后我們將演示如何把它應用到各種類型的資源文件中。

<WHAT>

表示到底代表的是什么資源,通常是一個標準的安卓View類,或者能代表view的類。(e.g. MainActivity -> activity)

<WHERE>

表示它屬于app的什么地方。在多個頁面使用的資源用all,其它的使用它們所在頁面名稱的自定義部分(e.g. MainActivity -> main, ArticleDetailFragment -> articledetail)。

<DESCRIPTION>

區分同一界面的不同元素

(e.g. title)

<SIZE> (可選)

可以是準確的大小也可以是描述大小的文字。可以選擇性的用在drawable和dimension上。

(e.g. 24dp, small))

可以下載和打印我提供的 備忘清單 方便隨時查閱。

好處

  1. 按頁面組織資源

    WHERE部分描述了一個資源所屬的頁面。因此可以很容易識別出一個特定頁面的所有ID, drawable, dimension。

  2. 一眼就能從資源ID判斷出類型

    對于資源id,WHAT部分描述了這個id所屬的xml元素的類名。這樣可以讓你更容易知道findViewById()調用之后應該轉換成什么類。

  3. Better resource organizing

    File browsers/project navigator通常按照字母順序排列文件。這意味著布局和drawable是按照他們的 WHAT(activity, fragment,..) 和 WHERE前綴組織的。現在有一個簡單的Android Studio插件可以讓這些資源看起來就像在自己的文件夾里面一樣。

  4. 提高自動補全的效率

    因為資源名稱非常好預測,使得ide的自動補全更容易了。通常輸入WHAT或者 WHERE就足以把自動補全的提示縮小到很窄的范圍了。

  5. 不再有命名沖突

    不同頁面之間相似的資源具有不同的where,或者是使用all。

  6. 更清晰的命名

    總體來說資源文件的命名更加有邏輯,使得項目更清晰。

  7. Tools support

    This naming scheme could be easily supported by the Android Studio offering features such as: lint rules to enforce these names, refactoring support when you change a WHAT or WHERE, better resource visualisation in project view,...

LAYOUTS

布局的命名相對簡單,因為通常一個頁面只有很少的布局。因此規則可以簡化成:

其中<WHAT>可以是以下名稱之一:

前綴 用處
activity activity的布局
fragment fragment的布局
view 一個自定義view所要inflated的布局
item recycler或者gridview中使用的布局
layout include標簽中用來重用的布局

例子:

  • activity_main: MainActivity的布局

  • fragment_articledetail:  ArticleDetailFragment的布局

  • view_menu: 被自定義view:MenuView所inflate的布局

  • item_article: ArticleRecyclerView中的item

  • layout_actionbar_backbutton:帶有返回按鈕的actionbar的布局

STRINGS

Strings的<WHAT>部分無關緊要。所以你要么使用<WHERE>表明string被使用的地方:

要么使用all表示整個app都要使用這個string:

Examples:

  • articledetail_title: ArticleDetailFragment的標題

  • feedback_explanation:  FeedbackFragment中的feedback explanation

  • feedback_namehint: hint of name field in FeedbackFragment

  • all_done: 通用的 "done" 字符。

很明顯同一視圖下的資源<WHERE>都是一樣的。

DRAWABLES

Drawables的<WHAT>也不重要。所以要么使用<WHERE>表明drawable被使用的地方:

要么使用all表示整個app都要使用這個drawable:

還可以選擇性的添加<SIZE>元素,可以是準確的大小如“24dp”也可以是大小修飾詞如“small”。

Examples:

  • articledetail_placeholder: placeholder in ArticleDetailFragment

  • all_infoicon: generic info icon

  • all_infoicon_large: large version of generic info icon

  • all_infoicon_24dp: 24dp version of generic info icon

IDS

對于ID,<WHAT>指的是它所屬的xml元素的類名。然后是id所在的頁面,最后可以選擇性的跟上一個描述,以區別同一頁面的相似元素。

例子:

  • tablayout_main -> MainActivity中的TabLayout

  • imageview_menu_profile -> 自定義MenuView中的profile image

  • textview_articledetail_title ->ArticleDetailFragment中標題對應的TextView

DIMENSIONS

app應該只定義一套數量有限的常用dimension,這個特性使得dimension一般都默認用all。

因此你最常用的是:

偶爾也可以指定具體的頁面:

其中<WHAT>是以下名稱之一:

Prefix Usage
width width in dp
height height in dp
size if width == height
margin margin in dp
padding padding in dp
elevation elevation in dp
keyline absolute keyline measured from view edge in dp
textsize size of text in sp

注意這里只包含了最常用的<WHAT>。其它dimension描述如:rotation, scale,...通常只用在drawable上,而且也是很少用。

例子:

  • height_toolbar: toolbar的高度

  • keyline_listtext: listitem text所要對齊的keyline

  • textsize_medium: 所有文字的中等大小

  • size_menu_icon: 菜單中圖標的大小

  • height_menu_profileimage: 菜單中profile image的高度

已知的缺陷

  1. 頁面必須具有唯一的名稱

    了避免<WHERE>參數發生沖突,View(以及可以代表View)的類必須具有獨有的名稱。所以你不能同時有“MainActivity”和 "MainFragment",因為 "Main" 前綴不再能夠識別出一個<WHERE>了。ps:這點其實可以靈活的處理,一般這種情況發生在不需要what的情況下,其實這個時候where我們可以用activity_main來表示,而不是main。

  2. 不支持重命名

    修改類的名稱并不能同步修改資源名稱。所以如果你把 "MainActivity" 改為 "ContentActivity",布局"activity_main"并不會重命名為"activity_content"。希望哪天Android Studio能添加這種支持。ps:這不算是缺陷吧,又不是這種命名規則引起的。

  3. 不能支持所有的資源類型

    這種規則當前不支持所有的資源類型。主要是有些資源不常用(比如raw 和 assets),還有些資源不是很好歸納(比如:themes/styles/colors/animations)。

WRAP-UP

以上就是本文的內容。一個簡單易用的資源文件命名規則。別忘了下載 cheat sheet 方便查閱哦!

雖然這種規則并不覆蓋所有的資源類型,但是它的確提供了一種解決了絕大多數命名問題的方法。

 

來自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/1104/6745.html

 

 本文由用戶 364599638 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!