1. 程式人生 > >Android程式碼規範_持續更新

Android程式碼規範_持續更新

   很慶幸,在我初入社會,就和一群大牛工作,並且我這張白紙,在大牛的工作中得到了比較好的薰陶和渲染。並且長此以往,根據學校老師,部落格大神,工作中大牛的程式碼風格,總結出來了自己當前的程式碼習慣和風格。

  博主程式碼命名有些比較偏的命名 很可能是中國式英文,一般習慣註釋,不管是在後期修改bug 還是立馬定位方法和功能點,都是很好用的,因為方法名很難記得非常準確,但是中文註釋就不一樣了,比如,“拍照”,“間隔拍照”,連續拍照,如果中文的話,你能直接F ,中文就直接立馬鎖定當前方法名字,但是如果是方法名字,可能takePhoto();intervalPhoto();continouPhoto(),我可能不能把全稱都記住,無法很好的鎖定我想要的方法。 這就是我的感覺。    


 下面來具體一個小內容 ,一個小內容 拆分開,詳細說下。第一步 配置工程一些必要的 設定。

 簡單說一些配置,下一次專篇寫一個Android Studio 工具的使用。

1).預設的 Android Studio 為灰色介面,可以選擇使用炫酷的黑色介面。Settings --> Appearance --> Theme ,選擇 Darcula 主題即可。
2).此部分會修改編輯器的字型,包含所有的檔案顯示的字型。Settings --> Editor --> Colors & Fonts --> Font 。預設系統顯示的 Scheme 為 Defualt ,你是不能編輯的,你需要點選右側的 Save As... ,儲存一份自己的設定,並在當中設定。之後,在 Editor Font 中即可設定字型。Show only monospaced fonts 表示只顯示等寬字型,

3).顯示行號Settings --> Editor --> Appearance ,勾選 Show line numbers 。

4).顯示方法分割線 Settings --> Editor --> Appearance ,勾選 Show mathod separators ,我自己還挺喜歡這個呢

5).我習慣顯示空格,這樣就能看出縮排是 tab 縮排還是空格縮排。建議使用空格縮排。Settings --> Editor --> Appearance ,勾選 Show whitespaces 。
6)去除拼接檢查。我試了下,真的是乾淨多了,強迫症程式設計師,所以禁用掉。Settings --> Inspections --> Spelling ,取消勾選。

7).java,xml佈局位置,有時候遇到開啟很多檔案的時候,佈局就會在上邊的bar上縮放起來了,其實我覺得賊不舒服,設定路徑
 Settings --> Editor --> General --> Editor Tabs --> Placement, 隨便設定,我設定在右邊挺順手的

8)取消 大小寫敏感  ,使用快速 索引,但有時候首字元是大寫,在呼叫的時候,首字母不大寫 還索引不到了,
 Settings --> Editor --> General --> Code completion --> Case sensitive completion  --->None
9.設定不開啟最後一次記錄的專案 (好處在於你如果是有多個專案的話,就可以選擇性開啟)。如果只會負責一個專案,那麼還是打對勾比較好
  Setting--->Appearance & Behavior  -->System Settings -->取消勾選Reopen last project on startup選項 --> OK。

上述配置都是我比較喜歡的 一些設定。 僅供參考,看個人習慣。



下面就是文章正題:

本人有一點點強迫症,不僅僅是程式碼,住的屋子也是不忍亂糟糟的。什麼屬性,什麼型別的,什麼功能,必須統一防止在一起。


1. dimens

尺寸,這是開發中常用之一:如果你習慣直接在xml 中標註尺寸,我很負責的說,你只適合在小公司開發小型專案,遇到大型專案,成百上千個dimens,你還手動輸入,再或者UI 又調整了 尺寸,再或者螢幕適配,你哭都來不及,說的不僅僅是 dimens ,colors ,string,全都是需要 適配的,所以千萬不要在使用那種很沒有水準的 方法了,說一件事,也不是嘲笑她,我們公司來了一個2年工作經驗的 Android 開發妹子,當時新開一個專案,妹子負責那個專案的 功能的 編寫,後來我也接手了這個專案,在修改他的程式碼的時候,真是不想看,貼一段程式碼:



text 是我們後期語言適配改的,全程都是直接寫在View 控制元件上,也就是說定死了這個view ,無法批量修改,無法適配平板,讓人後期很難辦。

所以良好的程式碼風格和習慣是利人利己。然後說完這些就是命名的風格了

<dimen name ="pf_ui_size_110">55dp</dimen>
<dimen name ="pf_ui_size_80">40dp</dimen>
<dimen name ="pf_ui_size_30">15dp</dimen>



不難看出來,除了第一個pf 你不知道啥意思,後面的你應該一眼看的懂,pf是Project f是File,意思就是,專案檔案-->UI-->尺寸 -->110,單位為px,前面的 pf 隨便改,統一就好。後面就是px 換算dp 是一半,因為我們的UI都給px,後面的dp 一定要嚴格按照px換算dp的規則來,要不,你寫了一個尺寸,然後尺寸卻不按照規則來,同事用的時候,會有尺寸的偏差。如果你想設定自己的專屬尺寸,可以直接另起別的地方,寫好什麼模組中,什麼功能,什麼文字需要用

<dimen name ="px_ui_size_110">55dp</dimen>



還有一個,就是textsize

風格同上,但是有點小區別

<dimen name ="pf_text_size_40">20sp</dimen>
<dimen name ="pf_ui_size_28">14sp</dimen>


統一 pf 這個位置的好處,在於你不用多想那麼多,單反用到dimens ,先@dimens/pf.  就會出來索引項,然後你在想你是用UI尺寸呢,還是text尺寸。然後就能直接找到 設計稿上的 給你標註的尺寸,如果後期需要調整,也很方便。在xml 刪除後面的 40,110,立馬就有更多選項出來,你只需要再度輸入尺寸,就能立馬定位到你想要的尺寸。 你試一次就知道有多方便了。


2.colors 

大致和上邊一樣風格,

<color name ="pf_color_626262">#626262</color>
<color name ="pf_color_e4e4e4">#e4e4e4</color>
<color name ="pf_color_fe2f2f">#fe2f2f</color>
<color name ="pf_color_88000000">#88000000</color>
<color name ="pf_color_1A0078ff">#1A0078ff</color>
<color name ="pf_color_55c6c6c6">#55c6c6c6</color>



3.String

這個就比較複雜了,這個才是真正難題,不可能跟上邊一樣來命名,這裡的文案最多,稍微不注意,就可能有重複命名字,

所以一句話,不怕長,就怕短。命名一定要長。儘量描述清楚,因為這裡都是一一對應的關係,大量引用同一個文案,也只有“取消”,“確認”,“傳送”,"失敗"這些通用的文案。所以命名好是很重要的,後期在國際化,適配,或者更換文案,十分方便。

我也看了郭霖大神的一篇公眾號推送,不過還是有自己的一套總結。看圖


型別分的很明確,Toast 代表的是 提示性 文案,Dialog 代表的是 彈窗 型別 文案,Label 代表的是 固定性文案。標籤,就是那些固定在一個地方,描述功能的 文案。後面是 模組 標明,然後是那個功能,如果功能不明,就簡單點,左邊Tab,還是上邊Tab,這是最次的選著,然後就是命名,比如說,這個地圖型別 有2種類型,“普通地圖”,“衛星地圖”,前面就要加"style",或者“type”,然後在說是什麼地圖,上邊有文案。

總結: 文案型別_模組_功能_型別(風格)_作用_狀態_描述

如果能分這麼多類就 這麼寫,如果沒有那麼多分類,就直接描述。這樣你在修改Strings 時候,很多類似的文案,你只需要複製一個,比如 Label_PlaneState_Calibration_ 

然後你就能隨意選則,飛行狀態列表中的 各種校磁 功能裡面的各種 文案。不管是後期修改,還是給別人看,都能明白。


4. 全域性變數命名,駝峰式命名, m開頭

對於全域性變數,我習慣小寫m 作為開頭,比如mTv_distance,mll_bg_mapType_normal,mIv_takephoto,  區域性變數,就直接寫功能名字,這樣在使用全域性變數的時候,很容易定位,也讓人很容易明白,整體的風格很統一。


5.  drawable 圖片xml(  點選/按壓/選中) 命名

 ps:    selector_main_map_type , 一層一層往下分模組,功能,作用,命名。不可有大寫內部資源命名,

  預設:

         小圖用icon_main_map_type_normal_default ,大圖用 pic_main_map_type_normal_default

  活動(因為分pressed,checked,selected): 

小圖用icon_main_map_type_normal_activity ,大圖用 pic_main_map_type_normal_activity     

 這樣在尋找 picture 資源的時候,特別方便,寫程式碼也放便,直接ctrl +alt + ↓ ,複製當前選中行的內容,然後修改後米的default 就拿到資源。


6.圖片資源,音訊資源命名

  比如Guide 引導圖介面,一般都有4+,Banner  引導圖,也一般為 4+,這樣的圖如果讓人耳目一新,秒懂,我自己認為。這樣寫 很容易理解

 (project)c2_guide_page_index_01 , c2_guide_page_index_02 , c2_guide_page_index_03 , c2_guide_page_index_04

c2_banner_page_index_01, c2_banner_page_index_02 ,c2_banner_page_index_03, c2_banner_page_index_04

帶阿拉伯數字是有點Low ,但是我覺得這也只有在大量使用重複型別的 資源的時候,每張圖片都是一個型別的,你只能這麼命名,因為這寫01,02,03,04 是經常替換的 圖片和資源。

   清晰,明瞭。很容易在資源中找到,並替換。 另外起名字一定不要怕長,但是不要過長,7個型別為最。


7. 使用strings  -->  array,一些重複型別控制元件命名

如果用到大量重複的控制元件,控制元件作用都一樣,比如點選選擇事件,我推薦,

一:文案用array ,控制元件使用 ListView ,ps :選擇視訊解析度,

 <array name="PlanSet_Camera_PhotoSize">
        <item>1920*1080</item>
        <item>3840*2160</item>
        <item>4208*3120</item>
    </array>
 <array name="PlanSet_Camera_Preview_VideoSize">
        <item>流暢</item>
        <item>標清</item>
        <item>高清</item>
        <item>超清</item>
    </array>

  還有一些跳轉的 點選事件介面,Label ,值得是單一的功能,listview 只響應點選事件,跳轉事件,點選賦值事件。

  使用array + listview  特別容易維護和修改,只需要修改array 字串,不管增/刪,立即定位,分秒解決。如果你寫死在程式碼裡,

你得需要寫5,10個Textviw ,然後在多次使用 1920*1080 這個文案,顯示,替換,增刪十分 不方便。維護成本大


8.  strings文案 屬性 (下劃線,空格,佔位符,轉譯符) 

 文案下劃線 

<string name="Label_Empty_Retry"><u>點選重試</u></string>
空格

<string name="Label_PlaneState_Calibration_SETP1">STEP1 \t\t請按照影象提示,水平旋轉飛行器</string>
    <string name="Label_PlaneState_Calibration_SETP2">STEP2\t\t請按照影象提示,豎直旋轉飛行器</string>
佔位符
<string name="DownPicDialogContent">下載%1$d張圖片</string>
  <string name="Date_Format">%1$d年%2$d月</string>
轉譯符  ’ 上引號需要轉譯 
  <string name="vj_next_tips_toast">Prochaine action disponible en moins d\'une minute</string>
    <string name="vj_container_filter">This video can\'t be edit because it has beed edited</string>

首字母縮排

 <string name="areement_title8">/t/t軟體的安裝與解除安裝</string>
 

9. 註釋的使用和技巧 

  

/**
     * <p>Marker 拖拽開始監聽</p>
     * <li>增加振盪器</li>
     * <li>獲取當前Marker 的起始座標並儲存</li>
     * <li>作用:當不滿足條件的時候,就可以使用起點座標</li>
     *
     * @param marker
     */
    @Override
    public void onMarkerDragStart(Marker marker) {
        ToolManager.VibratoSet(context); //marker Amap
        if (isPfMode == GduConfig.FpMode) {
            for (int i = 0; i < mPfMarkerList.size(); i++) {
                if (marker.equals(mPfMarkerList.get(i))) {
                    curMarkerPosition = mPfLatLngList.get(i + 1);
                }
            }
}

 我師傅教我的<p></p> ,<li></li>, 第一:看著非常整齊,第二:一張圖你就明白了。


P 就是標題,li 就是分段式標註,我用的是Ecilpse,用F2 能隔著看到不屬於當前類的方法註釋和作用,省事省力,美觀功能強大。還方便後人接管這個專案。利人利己。


10.巧用三元運算子

本人 不喜歡 特別長的程式碼,能省一行就省一行,雖然1.2行程式碼並不影響什麼,但是就是不喜歡

 if (isSMartModel) {
            img_smartIcon.setVisibility(View.VISIBLE);
            compass.setVisibility(View.GONE);
            compassPointer.setVisibility(View.GONE);
        } else {
            img_smartIcon.setVisibility(View.GONE);
            compass.setVisibility(View.VISIBLE);
        }

比較喜歡這種模式
img_smartIcon.setVisibility(isSMartMode?View.VISIBLE:View.GONE);
compass.setVisibility(isSMartMode?View.VISIBLE:View.GONE);
compassPointer.setVisibility(isSMartMode?View.VISIBLE:View.GONE);


11.方法的複用

在我的專案中,互動甚是複雜,那叫一個錯綜複雜。各種狀態判斷,反饋判斷,人為操作,有時候一種功能會影響到好多地方,所以程式碼也有重複的初始化,提示語言,等程式碼。為了讓我們的程式碼 看的更明白一點。

我覺得模組化,碎片化程式碼是上策。按照一個功能,一個模組的將同功能的,或者一個邏輯塊的放在一個方法裡面,如果初始化,或者重複呼叫。你的程式碼不久提高了利用率。比你複製3,4個同樣的程式碼 看來 不更完美,簡潔一點麼。

比如我們一般在生命週期,onCreate,onCreateView中 分成一個個索引鏈,方法。比如。




很清晰,而不是把findView 還有 setData,還有 還有 一堆亂起八糟的都放在onCreate

更方便的是提前建立一個Base 基類


不僅僅是大模組要劃分,小的功能呢也要學會重複利用。


 我上方右邊 索引後 一目瞭然。因為我在每一個呼叫方法後面都標明瞭 是誰在呼叫



用你能看懂的識別符號標識就是。能看懂即可,並不非要中文。

另外附上一張,我所謂的提煉方法的習慣。尤其在監聽回撥中,會有大量的 方法和互動,最好都把這些方法都用一根繩子一樣的 牽出去,只留線頭就行。



12 資源命名規則

 所有的資源,不管是icon 還是音訊,如果是一個模組的,一定要第一個字母 單詞保持一直,比如說smart 功能,有10張圖,一定要smart_takephoto ,     smart_video ,smart_gps ,這樣 後期換UI 資源,是特別方便的,直接在資料夾中 查詢smart 能看到所有 smart 功能資源,想換那個換那個,就算這個功能不是你做的,是讓另一個人來修改,也是特別特別的方便,快捷,明瞭 ,