Android代码规范_持续更新

来源:互联网 发布:dota2 大数据 编辑:程序博客网 时间:2024/05/21 10:24

   很庆幸,在我初入社会,就和一群大牛工作,并且我这张白纸,在大牛的工作中得到了比较好的熏陶和渲染。并且长此以往,根据学校老师,博客大神,工作中大牛的代码风格,总结出来了自己当前的代码习惯和风格。

  博主代码命名有些比较偏的命名 很可能是中国式英文,一般习惯注释,不管是在后期修改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

上述配置都是我比较喜欢的 一些设置。 仅供参考,看个人习惯。



下面就是文章正题:

本人有一点点强迫症,不仅仅是代码,住的屋子也是不忍乱糟糟的。什么属性,什么类型的,什么功能,必须统一防止在一起。


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  请按照图像提示,水平旋转飞行器</string>    <string name="Label_PlaneState_Calibration_SETP2">STEP2  请按照图像提示,竖直旋转飞行器</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 功能资源,想换那个换那个,就算这个功能不是你做的,是让另一个人来修改,也是特别特别的方便,快捷,明了 ,

原创粉丝点击