Android 命名规范和编码规范

时间:2021-01-23 20:05:55

制定规范不需要太多的理论知识,只需记住两点即可:尽量简单,多写注释。

Android 命名规范

无规矩不成方圆。
命名规范有以下几点需要注意:
首先,命名规范不能反人类。
错误示例:PersonActivityAddCustomer.java
正确示例:AddCustomerActivity.java

其次,要望文而知义,清晰准确。
eg:登录按钮命名:login_button(资源文件)或 btnLogin(Java代码中按钮实例)。

最后,命名规范要做到简单易记,适可而止。

下面说点具体的规则:
1)Java 类文件命名规范:
Activity 命名规范:以 Activity 作为后缀。如:PersonActivity。
Adapter 命名规范:以 Adapter 作为后缀。如:PersonAdapter。
Entity 命名规范:打多以 Entity 作为后缀。如:PersonEntity。

2)资源文件命名规范:
layout 目录下的文件命名规范:

  • 页面布局文件。以 act_ 为前缀,以 Activity 所在的 Package 作为中缀,以 Activity 的名称(去掉 activity 后缀)作为后缀。注意都是小写。如:act_person_addcustomer.xml。
  • ListView 中的 item 布局文件。以 item_ 作为固定前缀,列表项的名称为后缀。如:item_lv_userlist.xml。
  • Dialog 布局文件。以 dlg_ 作为固定前缀。如:dlg_hint.xml 。

drawable 目录下的文件命名规范:
建议:将 xml 文件放在 drawable 文件夹下,而图片统一放在 drawable-xxhdpi 文件夹下。

  • 对于只在一个页面使用的资源,就以该页面的名称作为前缀。
  • 对于只在一个模块下多个页面使用的资源,就以该模块的名称作为前缀。
  • 对于在各模块、各个页面都有可能使用的资源,以 common 作为前缀。

3)Java 类中控件对象的命名规范。
m + 控件类型缩写 + 控件的逻辑名称(首字母大写),比如登录按钮 mBtnLogin
Android 命名规范和编码规范

4)Layout 中控件对象的命名规范。

mRecyclerView = (RecyclerView)findViewById(R.id.recycler_view);

5)strings.xml 中常量的命名规范。
因为这些值大多在 layout 中的控件上使用,所以以该常量所在的 Activity 名称作为前缀,后面接控件名称,再后面就*发挥啦!如:loginActivity_btnLogin_text

6)常量命名。
遵守 Java 的命名规范,即只能包含字母和下划线 ,字母全部大写,单词之间用下划线 隔开。

制定一套切实可行、易于遵守的命名规范,是每个 Team Leader 的必备技能。

Android 编码规范

1)要分门别类存放各种类,如下图:
Android 命名规范和编码规范

2)要怎么使用 findViewById 语句:

    private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initDatas();

mRecyclerView = (RecyclerView)findViewById(R.id.recycler_view);

//瀑布流
StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(manager);

FruitAdapter adapter = new FruitAdapter(mInfos);
mRecyclerView.setAdapter(adapter);
}

3)Layout 中的常量,要在资源 strings.xml 中定义。
以下的使用方式是错误的:

<TextView android:text = "评论" ....../>

我们要将“评论”这个常量定义在strings.xml 中:

<resources>
...
<string name="loginActivity_tv_text">评论</string>
...
</resources>

然后在 Layout 布局文件中这样使用:

<TextView android:text = "@string/loginActivity_tv_text" ....../>

4)Layout 中所有控件的字体大小和颜色,都定义在dimens.xml 和 colors.xml 中。

5)在 Activity 中,定义新的生命周期,从而将 onCreate 方法拆分为以下 3 部分:
initVariables:初始化变量(包括 Intent 上的数据和 Activity 内部使用的变量)。
initViews:加载 layout 布局文件,初始化控件。
loadData:调用 MobileAPI 。

6)坚持使用 fastJSON 自定义实体来作为 MobileAPI 的数据载体。

7)页面之间传值,坚持使用 Intent 携带序列化实体数据的方式。禁止为了省事使用变量进行传值的方式。

8)为控件添加事件。统一使用如下方式:

    mListView = (ListView)findViewById(R.id.list_view);
mListView.setAdapter(new CommonAdapter<Fruit>(this,R.layout.item_cinemalist,mInfos) {
@Override
protected void convert(ViewHolder viewHolder, Fruit item, int position) {
viewHolder.setImageResource(R.id.fruit_image,item.getImageId());
viewHolder.setText(R.id.fruit_name,item.getName());
}
});
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this,"点击了"+i,Toast.LENGTH_SHORT).show();
}
});

9)Activity 中不要嵌套内部类,尽量都独立出来,该放哪儿就放哪儿。

10)Adapter 的编码规范如下:
所有的 Adapter ,都放在 adapter 这个包中。
Adapter 绑定数据,一律为 ArrayList<自定义可序列化实体>。
在 Adapter 中创建适合与列表自身的 ViewHolder 实体类。统一命名为 ViewHolder。

11)实体不要在不同模块间共享,但是可以在同一模块下的不同页面间共享。

12)为节省内存,请使用 ArrayList<自定义实体>,而不是 HashMap 。

13)图片的处理,统一使用第三方组件 Glide ImageLoader 或者 Fresco 来进行异步加载。

14)尽量使用 ApplicationContext 代替 Context,否则会引起内存泄漏。

15)数据类型转换一定要进行校验。

16)使用常量来代替枚举。总所周知,枚举的每个值只能是一个整数,而没有 toString 这样的方法,所以不如在类中定义一个字符串常量方便。

Android开发规范:https://github.com/Blankj/AndroidStandardDevelop