Android开发规范
为了规范开发,减小重构成本,总结编码规范如下,分享给大家,提供个参考
命名规范
关于MVP
对于MVP模式,由于需要实现众多的接口,导致代码臃肿,故决定采取Contract模式,即将接口统一放置在同一类中。
e.g.
特别注意:为了减少开发成本,请特别注意Contract内部类的命名,如确定此方案,则务必不要命名为NewsModel等形式
public interface NewsContract{ interface Model{ } interface Presenter{ } interface View{ } }
对应实现类:
特别注意:为了减少开发成本,请特别注意Presenter内部接口的命名,如确定此方案,则务必不要命名为NewsPresenterImpl等形式
NewsPresenter
public class NewsPresenter implments NewsContract.Presenter{ }
NewsModel
public class NewsModel implments NewsContract.Model{ }
特别注意:明确区分Model与Entity 所有实体类放入Entity包,业务逻辑处理放入Model包
关于成员与变量
- 为了区分成员与local变量,采取与Android源码一致规范,即成员前加m。
- 静态常量命名需大写,且为final。
e.g.
public class Goods{ public static final String GOODS = "goods"; private String mGoodsName; private int mId; public class Goods(String goodsName,int id){ mGoodsName = goodsName; mId = id; } }
需要用作类似key判断的应写在静态常量里,切勿出现以下情况:
//这是错误的范例,不要学!!!
intent.getStringExtra("key");
if(message.what == 0x123){
}
webView.loadUrl("http://baidu.com");
规范写法如下:
static final String KEY = "key";
intent.getStringExtra(KEY);
static final int FLAG = 0x123;
if(message.what == FLAG){
}
static final String HOST = "http://baidu.com";
webView.loadUrl(Constant.HOST);
关于Activity
对于需要参数的Activity启动,统一提供静态方法,可以明确地通知调用者需要的参数,避免漏参情况。
特别注意:为了减少开发成本,请注意方法命名,如确定此方案,则务必不要命名为startWebViewActivity()等形式
e.g.
public static void startActivity(Context context, String title, String url) { Intent intent = new Intent(context, WebViewActivity.class); intent.putExtra(WebViewActivity.EXTRA_URL, url); intent.putExtra(WebViewActivity.EXTRA_TITLE_TEXT, title); context.startActivity(intent); }
关于fragment
统一提供newInstance()方法返回实例.
特别注意:为了减少开发成本,请注意方法命名,如确定此方案,则务必不要命名为newPlaceFragment()等形式
e.g.
public static PlaceholderFragment newInstance(int sectionNumber){ PlaceholderFragment fragment = new PlaceholderFragment(); Bundle args = new Bundle(); args.putInt(ARG_SECTION_NUMBER, sectionNumber); fragment.setArguments(args); return fragment; }
关于布局文件
对于xml文件命名,前缀有layout、view、item、activity、fragment
对于id命名,有如下映射表,以此类推:
控件名称 id命名 TextView tv_sample RecyclerView rv_sample LinearLayout ll_sample RelativeLayout rl_sample