LeoYan Blog

技术分享,生活记录。

0%

Android 命名规范 (提高代码可读性)

转载请注明出处:www.leoyanblog.com

本文出自 LeoYan 的博客

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 LeoYan 即可关注。

标识符命名法主要有四种:

  1. Camel命名法:又称小驼峰命名法。除首单词外,其余所有单词的第一个字母大写,如:fooBar;
  2. Pascal命名法:又称大驼峰命名法。所有单词的第一个字母大写,如:FooBar;
  3. 下划线命名法:单词与单词间用下划线做间隔,如:foo_bar;
  4. 匈牙利命名法:开头字母用变量类型的缩写,其余部分用变量的英文或英文的缩写,要求单词第一个字母大写。如:int iMyAge; “i”是int类型的缩写;

安卓App层开发主要是Java语言,所以基本使用除了第四种外的命名方式;

英文缩写在命名是必须的,遵循下面规则:

  1. 较短的单词可通过去掉“元音”形成缩写,如icon->ic;
  2. 较长的单词可取单词的头几个字母形成缩写,如:average->avg;
  3. 此外还有一些约定成俗的英文单词缩写,如 Internationalization->I18N;
  4. 程序中不要用缩写,除非该缩写是约定俗成的。

下面为常见的英文单词缩写:

名称 缩写
icon ic (主要用在app的图标)
color cl(主要用于颜色值)
divider di(主要用于分隔线,不仅包括Listview中的divider,还包括普通布局中的线)
selector sl(主要用于某一view多种状态,不仅包括Listview中的selector,还包括按钮的selector)
average avg
background Bg(主要用于布局和子布局的背景)
buffer buf
control ctrl
delete del
document doc
error err
escape esc
increment inc
infomation info
initial init
image img
Internationalization I18N
length len
library lib
message msg
password pwd
position pos
server srv
string str
temp tmp
window wnd(win)

命名规范:

包(packages): 采用反域名命名规则,全部使用小写字母。一级包名为地顶级域名如com,二级包名为xx(可以是公司或个人的随便),三级包名根据应用进行命名,四级包名为模块名或层级名;如 com.tinyx.myapp.activities;

类(classes): 用Pascal命名法,尽量避免缩写,如:MyActivity;缩写是众所周知的,如HTML,URL;类名称中包含单词缩写,则单词缩写的每个字母均应大写,如:PublicHTML,CommonURL。

接口(interface): 与类一样用Pascal命名法,多以able或ible结尾,多用作表示行为,如Runnable,Accessible;

方法(methods): 动词或动名词,采用Camel命名法,如:onCreate(), run();下面是一些建议:

  • 初始化相关方法,使用init为前缀标识,如:初始化布局initView();
  • boolean型使用is或check为前缀标识, 如:checkValue()、isValidate();
  • 返回某个值的方法,使用get为前缀标识,如:getName();
  • 数据进行处理相关,尽量使用process为前缀标识,如:processUpdate();
  • 保存数据相关,使用save为前缀标识,如:saveData();
  • 对数据重置的,使用reset前缀标识,如:resetData();
  • 清除数据相关,使用clear前缀标识,如:clearData();
  • 移除某些项目,使用remove前缀标识,如:removeItem();
  • 绘制数据或效果相关的,使用draw前缀标识,如:drawCircle();

变量(variables): 采用Pascal命名法,建议采用有意义的命名如:firstName, lastName;

  • 模型类变量默认以上规则
1
2
3
4
5
6
7
8
9
10
11
public class User {
public String name;
public String phone;
public int sex; //1,男 2,女

public User() {
this.name = "myname";
this.phone = "123“
this.sex = 0;
}
}
  • 非模型类全局参数建议加上小写m开头;
1
2
3
4
5
6
7
8
9
10
11
public class TestActivity extends Activity{
private ZoomableImageView mZoomableView;
private TabLayout mTabLayout;
private int mItemsCount;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_activity);
}
}

常量(constants): 全部大写,采用下划线命名法。如下:

1
2
public static final int MAX_ITEMS= 10;
public static final String TAG = User.class.getSimpleName();

资源文件命名(resources): 采用下划线命名法,全部小写,针对不同资源,建议用下面的命名方法;

  • drawable资源,加前缀命名:前缀_功能_模块_说明.xml/png/
说明 命名范例
图标:建议格式 ic_xxx; ic_appicon.png
背景:建议格式 bg_xxx; bg_normal_button_default.xml, bg_normal_button_press.xml
  • layout资源文件,前缀命名:类型_模块_功能_说明.xml,举一些常用的例子如下:
说明 命名范例
Activity布局文件 activity_main.xml
Fragment布局文件 fragment_main.xml
局部布局View文件 view_main_header.xml, view_main_bottom.xml
自定义提示对话框 dialog_alert.xml
列表项等 fragment_user_list_item.xml
  • 动画anim资源文件(anim只有一种资源,所以不必加前缀区分):模块_功能_动画_方向.xml
说明 命名范例
淡入 main_button_fade_in.xml
淡出 main_button_fade_out.xml
从下方推入 button_push_down_in.xml
从下方推出 main_button_push_down_out.xml
  • menu菜单资源文件(menu只有一种资源,所以不必加前缀区分):模块_功能_说明.xml
说明 命名范例
主界面菜单 main_activity.xml
Fragment界面菜单 user_fragment.xml
  • values资源,这个主要分下面几种资源:

1、 ids资源,主要存放是界面控件的id值,用下划线小写命名法,前缀方式:前缀_模块_功能_说明,常用界面控件命名如下:

说明 命名范例
布局和子控件(ViewGroup,自定义View) view_main_topnav
TextView tv_main_title
Button btn_user_add
ImageButton imgbtn_user_del
ImageView img_thumb
CheckBox cb_sex
RadioButton rbtn_answer
EditText et_username
ToggleButton toggle_funtion
ProgressBar pb_download
SeekBar sb_progress
ProgressBar pb_download
VideoView vv_course
WebView wv_download
RantingBar rb_download
Spinner sp_cities
ScollView sv_main
TextSwitch sp_cities
ListView/ExpandListView/RecyclerView lv_cities
MapView mv_location

2、strings/arrays/dimens资源,用下划线小写命名法,不加任何前后缀,格式:模块_功能_说明。

3、attrs/colors/ids的属性和名称使用Camel命名法;styles的属性使用Camel命名法,名称使用Pascal命名法;如下面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!--attrs-->
<attr name="text" format="string" />
<attr name="itemIcon" format="reference" />
<attr name="showToggle" format="boolean" />
<attr name="showVersion" format="boolean" />
<style name="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>

<!--colors-->
<color name="colorPrimary">#009688</color>
<color name="colorPrimaryDark">#00796b</color>
<color name="colorAccent">#cddc39</color>

<!--ids-->
<item name="tabLayout" type="id"/>
<item name="viewPager" type="id"/>
<item name="viewContainer" type="id"/>