壹 、Android编码规范,① 、编码规范 二 、命名规范  

前言:

前言:

  最近工作肩负八个医疗APP项目的支出,同时选用LeanCloud实行云端协作开发,完全单挑。

  最近干活担负多个医疗APP项目标支付,同时利用LeanCloud进行云端合营开发,完全单挑。

  现大框架已经形成,正在展开细节模块上的开销

  现大框架已经成功,正在开始展览细节模块上的付出

365体育官网,  抽空计算一下Android档次的耗费规范:一 、编码规范 二 、命名规范  

  抽空总括一下Android类型的开发规范:壹 、编码规范 ② 、命名规范  

  注:个人经历,经供参考

  注:个人经历,经供参考



① 、Android编码规范

① 、Android编码规范

  1、学会使用string.xml文件

  ① 、学会使用string.xml文件

  以作者之见,当2个文书音信出现的次数超越三次的时候就必供给使用string.xml

  以小编之见,当一个文本音信出现的次数超越2回的时候就必须求使用string.xml

  比如一个保留按钮 , 不标准写法:

  比如四个保留按钮 , 不伦不类写法:

      <Button
            android:id="@+id/editinfo_btn_save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"       
            android:text="保存"
            />
      <Button
            android:id="@+id/editinfo_btn_save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"       
            android:text="保存"
            />

  那里给它的文本内容设置为”保存”,那么贰个app中保有的保留按钮都那样写。当有一天要修改须要了,要求把“保存”文字改成“提交”,那么我们不得不去2个个布局文件中期维修改,

  这里给它的公文内容设置为”保存”,那么一个app中颇具的保留按钮都那样写。当有一天要修改要求了,必要把“保存”文字改成“提交”,那么大家不得不去三个个布局文件中修改,

  岂不浪费大量时间又或者会存在疏漏修改的事态。

  岂不浪费多量光阴又只怕会设有疏漏修改的情景。

  规范写法:

  规范写法:

      <Button
            android:id="@+id/editinfo_btn_save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"       
            android:text="@string/save"
            />
      <Button
            android:id="@+id/editinfo_btn_save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"       
            android:text="@string/save"
            />

  而在string.xml文件中:

  而在string.xml文件中:

    <string name="save">保存</string>
    <string name="save">保存</string>

  那种写法,现在亟待修改,只供给在string.xml文件中期维修改一行代码
便落成了百分之百APP的该文本内容改动。

  那种写法,现在亟待修改,只须求在string.xml文件中期维修改一行代码
便达成了方方面面APP的该文本内容改动。

  

  

  二 、学会运用color.xml
,dimens.xml文件的使用

  贰 、学会使用color.xml
,dimens.xml文件的利用

  同string.xml使用同一,同学们应当都懂的,切勿因为时期的懒,导致前期的迭代费时吃力。

  同string.xml使用同样,同学们应该都懂的,切勿因为一时的懒,导致早先时期的迭代费时困难。

  

  

  ③ 、团队联手分明一套标准Activity的onCreate()方法中代码执行流程

  三 、团队一同显然一套标准Activity的onCreate()方法中代码执行流程

  其实刚接触Android的时候,我的不正规代码是如此的:

  其实刚接触Android的时候,笔者的不标准代码是如此的:

   private Button scan;            //扫描按钮
    private Button create;          //创建按钮
    private ArrayList<Object> datas; //数据源
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        create = (Button) findViewById(R.id.create);
        scan = (Button) findViewById(R.id.scan);
        scan.setOnClickListener(this);
        create.setOnClickListener(this);
        datas = new ArrayList<>();
        datas.add(new Integer(1));
        datas.add(new Integer(2));
        datas.add(new Integer(3));
        datas.add(new Integer(4));
    }
   private Button scan;            //扫描按钮
    private Button create;          //创建按钮
    private ArrayList<Object> datas; //数据源
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        create = (Button) findViewById(R.id.create);
        scan = (Button) findViewById(R.id.scan);
        scan.setOnClickListener(this);
        create.setOnClickListener(this);
        datas = new ArrayList<>();
        datas.add(new Integer(1));
        datas.add(new Integer(2));
        datas.add(new Integer(3));
        datas.add(new Integer(4));
    }

  什么都不管,全数的操作代码都写在onCreate()方法中,包蕴find控件。设置监听事件,加载数据源等等。

  什么都不管,全体的操作代码都写在onCreate()方法中,包涵find控件。设置监听事件,加载数据源等等。

  能够见到现在就1个控件八个数据源,代码就像此多了,假使贰个界面有10八个控件呢,那onCreate()方法中的代码量就成倍数的多起来了。

  能够观察明天就一个控件贰个数据源,代码就像是此多了,若是贰个界面有10多个控件呢,那onCreate()方法中的代码量就成倍数的多起来了。

  所以全部的Activity都要设定3个统一的行业内部。

  所以全部的Activity都要设定2个联结的正经。

  我们都清楚,二个Activity中有基本都有的操作:

  我们都知晓,1个Activity中有基本都有个别操作:

    壹 、开始化变量

    一 、开始化变量

    ② 、开头化控件

    2、开始化控件

    叁 、设置监听事件

    三 、设置监听事件

    四 、加载互联网数据并出示

    肆 、加载互联网数据并展示

  那么就足以将上述的代码分门别类的放在那么些办法中

  那么就能够将上述的代码分门别类的放在那多少个章程中

  比如一段正式代码:

  比如一段正式代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_scan;            //扫描按钮
    private Button btn_create;          //创建按钮
    private ArrayList<Object> datas; //数据源
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initVariables();
        initView();
        initEvent();
        loadData();
    }

    //初始化变量,比如 上一个Activity传来的Intent的数据  本Activity中一些标记变量等
    private void initVariables() {

    }

    //加载数据源
    private void loadData() {
    }

    //注册监听事件
    private void initEvent() {
        btn_scan.setOnClickListener(this);
        btn_create.setOnClickListener(this);
    }

    //初始化控件
    private void initView() {
        btn_create = (Button) findViewById(R.id.create);
        btn_scan = (Button) findViewById(R.id.scan);
    }

    //设置点击事件
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_scan:
                //扫描二维码
                startActivity(new Intent(this,ScanActivity.class));
                break;
            case R.id.btn_create:
                //生成二维码
                startActivity(new Intent(this,CreateActivity.class));
                break;
        }
    }
}
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_scan;            //扫描按钮
    private Button btn_create;          //创建按钮
    private ArrayList<Object> datas; //数据源
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initVariables();
        initView();
        initEvent();
        loadData();
    }

    //初始化变量,比如 上一个Activity传来的Intent的数据  本Activity中一些标记变量等
    private void initVariables() {

    }

    //加载数据源
    private void loadData() {
    }

    //注册监听事件
    private void initEvent() {
        btn_scan.setOnClickListener(this);
        btn_create.setOnClickListener(this);
    }

    //初始化控件
    private void initView() {
        btn_create = (Button) findViewById(R.id.create);
        btn_scan = (Button) findViewById(R.id.scan);
    }

    //设置点击事件
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_scan:
                //扫描二维码
                startActivity(new Intent(this,ScanActivity.class));
                break;
            case R.id.btn_create:
                //生成二维码
                startActivity(new Intent(this,CreateActivity.class));
                break;
        }
    }
}

    能够看到,onCreate()中就那么多少个章程了,我们供给找难题的时候在对应的章程中去找即可,既有益又清晰。

    能够看出,onCreate()中就那么多少个办法了,大家必要找难题的时候在对应的法子中去找即可,既有利于又清晰。

    其实那种操作大家得以写2个BaseActivity作为它的的架空方法,然后让Activity继承那些BaseActivity基类重写方法即可,涉及到架构,那些现在加以。

    其实那种操作我们可以写二个BaseActivity作为它的的架空方法,然后让Activity继承那一个BaseActivity基类重写方法即可,涉及到框架结构,那么些现在再说。

 

 

  四 、团队同步明确一种控件的点击事件OnClickListener()

  ④ 、团队联手鲜明一种控件的点击事件OnClickListener()

   
Android给我们提供5种给控件设置OnClick的办法,个人觉得项目中用的最多的正是

   
Android给大家提供5种给控件设置OnClick的措施,个人觉得项目中用的最多的就是

   ①、参数this 然后Activity
实现 View.OnClickListener接口  重写 onClick()方法

   ①、参数this 然后Activity
实现 View.OnClickListener接口  重写 onClick()方法

 

 

btn_create.setOnClickListener(this);
btn_create.setOnClickListener(this);

     2、直接参数new OnclickListener()的

     二 、直接参数new OnclickListener()的

btn_create.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
btn_create.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

   别的四个主意个人认为尽量不要用。而那三种办法中第二种
是更好的,因为我们能够因此switch–case
的艺术分别区别控件的点击事件,代码更显明简约。

   其余三个点子个人认为尽量不要用。而那三种办法中率先种
是更好的,因为大家能够透过switch–case
的法门分别不一样控件的点击事件,代码更清楚简约。

    
当然第三种方式也是能够的,然而切记同多少个体系中最佳唯有一种办法,便于早先时期的保卫安全。

    
当然第二种办法也是足以的,可是切记同2个品种中最佳只有一种艺术,便于前期的保卫安全。

  //设置点击事件
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.scan:
                //扫描二维码
                startActivity(new Intent(this,ScanActivity.class));
                break;
            case R.id.create:
                //生成二维码
                startActivity(new Intent(this,CreateActivity.class));
                break;
        }
    }
  //设置点击事件
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.scan:
                //扫描二维码
                startActivity(new Intent(this,ScanActivity.class));
                break;
            case R.id.create:
                //生成二维码
                startActivity(new Intent(this,CreateActivity.class));
                break;
        }
    }

 

 

 
  ⑤ 、尽量少用全局变量static实行传值操作

 
  五 、尽量少用全局变量static进行传值操作

   
static的性格大家应该都以了然的,他会一贯占据部分内部存款和储蓄器,固然很少,然则2个品类中诸多少个利用的话,对品种是可怜倒霉的。

   
static的特色大家应该都以理解的,他会直接占有部分内部存款和储蓄器,固然很少,然而1个连串中诸四个应用的话,对项目是老大不好的。

    提议页面之间的传值依旧用Intent
,完成没有好的消除方案的再用static , PS
,小编事先公司的档次就格外大气的应用了static 

    建议页面之间的传值照旧用Intent
,达成没有好的化解方案的再用static , PS
,作者事先公司的项目就可怜大气的采纳了static 

       
 注:有个别同学或许对Activity和Fragment的交互传值十分的小会,那里推荐二个消除方案:Android项目实战(十三):浅谈伊芙ntBus ,
对自家来说是项目必备,可是也要客观使用

       
 注:有些同学或者对Activity和Fragment的竞相传值一点都不大会,那里推荐三个缓解方案:Android项目实战(十三):浅谈伊夫ntBus ,
对自我来说是项目必备,然则也要创制使用

  

  

  陆 、Activity中尽量不要采取个中类

  陆 、Activity中尽量不要采用在这之中类

    这里以RecyclerView举例,一款相当的屌的控件,有了它再也不用ListView了
浅谈RecyclerView(完美替代ListView,GridView)

    那里以RecyclerView举例,一款非常的棒的控件,有了它再也不用ListView了
浅谈RecyclerView(完美替代ListView,GridView)

    三个RecyclerView是配套二个Adapter和八个ViewHolder的。

    2个RecyclerView是配套三个Adapter和三个ViewHolder的。

    不规范做法:部分同学图方便(当然放在一个Activity中确确实实方便数据传输和item点击事件操作),把它们都写在3个Activity中,那样是不可取的,因为大大的扩张了单个Activity的代码量,对珍爱的话很不便利。

    不规范做法:部分同桌图省事(当然放在2个Activity中真的方便数据传输和item点击事件操作),把它们都写在二个Activity中,那样是不可取的,因为大大的增加了单个Activity的代码量,对保安来说很不便宜。

    规范做法: ViewHolder一个类 ,Adapter二个类 , 分工分明,制止八个类中代码量过多的标题。

    规范做法: ViewHolder一个类 ,Adapter二个类 , 分工鲜明,制止贰个类中代码量过多的难题。

    注:ListView,ViewPager
使用同上 

    注:ListView,ViewPager
使用同上 

    至于类的归类,有的同学喜欢三个功效模块放在一个包下,比如3个效益点的Activity
, Adapter ,ViewHolder都坐落四个包下

    至于类的分类,有的同学喜欢一个作用模块放在一个包下,比如三个效能点的Activity
, Adapter ,ViewHolder都置身多个包下

                             
 有的同室喜欢一类型的放在多个包下,比如将兼具的Activity放在activitys包下,将拥有的Adapter放在adapters包下。

                             
 有的同校喜欢一类别的位于叁个包下,比如将具备的Activity放在activitys包下,将持有的Adapter放在adapters包下。

    那皆现在话,未来上学架构的时候再详谈

    那都现在话,未来学习架构的时候再详谈

 

 

  7、使用ArrayList代替HashMap

  7、使用ArrayList代替HashMap

   
 据他们说,是听大人讲,ArrayList使用的内部存储器要小于HashMap,因为android手提式有线电话机犬牙交错,所以开发进程中对内部存款和储蓄器依然格外珍视的,能省则省。

   
 据书上说,是口耳之学,ArrayList使用的内部存款和储蓄器要小于HashMap,因为android手提式有线电话机犬牙相错,所以开发进度中对内部存款和储蓄器仍旧格外重视的,能省则省。

    PS:作者的种类中基本接纳的ArrayList,除非是ArrayList代替不了的数据结构

    PS:作者的门类中挑寿春使用的ArrayList,除非是ArrayList代替不了的数据结构

 

 

  八 、共青团和少先队规范统一的第②方

  八 、团队专业统一的第①方

   
 将来便民又好用的第1方太多了,图片框架好多少个优异的,推送好多少个优异的,即时通信好多少个特出的。

   
 未来方便人民群众又好用的第①方太多了,图片框架好多少个美好的,推送好多少个美好的,即时通信好多少个美好的。

   
 注意利用太多的第叁方会招致程序过大,而且动用有3个最大措施数的限量,防止落成一种意义的第1方,共青团和少先队成员使用的都是不等同的第3方。

   
 注意利用太多的第二方会招致程序过大,而且接纳有2个最大措施数的限制,防止完成一种意义的第③方,团队成员使用的都以不等同的第二方。

   

   

  玖 、统一代码格式

  九 、统一代码格式

    经典的就是for循环了,
一种是左括号放在最后,3个是另起一行。
统一下,界面看起来舒服,个人提出左括号放在最终的不二法门,别问小编何以,高校老师推荐的,理由:忘了。

    经典的正是for循环了,
一种是左括号放在最后,3个是另起一行。
统一下,界面看起来舒服,个人提出左括号放在最终的措施,别问小编干吗,大学老师推荐的,理由:忘了。

     for (int i = 0; i < 10; i++) {

        }
        for (int i = 0; i < 10; i++) 
        {

        }
     for (int i = 0; i < 10; i++) {

        }
        for (int i = 0; i < 10; i++) 
        {

        }

 

 

  ⑩ 、不一样功用代码之间要有一行空格分开

  十 、区别功用代码之间要有一行空格分开

    协作的写上诠释,告诉维护的同校 ,哪一段代码是拓展什么操作的 

    协作的写上诠释,告诉维护的同班 ,哪一段代码是展开什么操作的 

    为了代码清晰 也为了拥戴的同室少长两根毛发。。

    为了代码清晰 也为了体贴的校友少长两根头发。。

   

   

  1① 、假诺你是Android Studio开发

  1一 、若是您是Android Studio开发

    请频仍利用Ctrl+A  –》  Ctrl +Alt + I  

    请频仍利用Ctrl+A  –》  Ctrl +Alt + I  



② 、Android命名规范

贰 、Android命名规范

  命名规范:驼峰法,下划线分割法。

  命名规范:驼峰法,下划线分割法。

  1、Java类文件

  1、Java类文件

  1、Activity:以Activity作为后缀,那一个相信大家AS给您的都帮您搞好了。

  一 、Activity:以Activity作为后缀,那么些相信我们AS给您的都帮您做好了。

  贰 、Adapter: 以艾达pter作为后缀

  2、Adapter: 以Adapter作为后缀

  三 、ViewHolder: 以ViewHolder作为后缀

  三 、ViewHolder: 以ViewHolder作为后缀

  四 、实体类Entity:以Entity作为后缀

  肆 、实体类Entity:以Entity作为后缀

   

   

  如下,我是以功用模块分包,大神勿喷,个人喜好:

  如下,笔者是以效能模块分包,大神勿喷,个人喜好:

  365体育官网 1

  365体育官网 2

  2、xml文件

  2、xml文件

  ①、layout.xml

  ①、layout.xml

    Activity的布局文件以activity_ 开头,AS提供的。

    Activity的布局文件以activity_ 开头,AS提供的。

    列表项的布局文件listview  以 item_list_开头。

    列表项的布局文件listview  以 item_list_开头。

  贰 、控件的命名

  贰 、控件的命名

    缩写,那几个看个人了,

    缩写,那些看个人了,

    小编的经验,比如:

    笔者的经历,比如:

    LayoutView    —-    lv

    LayoutView    —-    lv

    TextView        —-    tv

    TextView        —-    tv

           Button          —-    btn

           Button          —-    btn

    ImageView     —-    img

    ImageView     —-    img

 

 

  切记,不要使用拼音命名,就算英文这么菜的博主本人付出都开着有道词典。

  切记,不要接纳拼音命名,即使英文这么菜的博主本身付出都开着有道词典。

  最后,编码一定要写注释,你命名的借使英文不是当下能看懂的,请一定要写上诠释。

  最终,编码一定要写注释,你命名的借使英文不是登时能看懂的,请一定要写上诠释。

     

     

   注释!

   注释!

  注释!

  注释!

   注释!

   注释!

 

 

相关文章