📜  Android 编码风格和指南

📅  最后修改于: 2022-05-13 01:58:44.140000             🧑  作者: Mango

Android 编码风格和指南

在编写代码时,您需要遵循一些规则以使代码易于阅读和清洁。如果您不是编码新手,您可能已经了解编码标准。编码标准因人而异,并且对于不同的项目可能有所不同。在开始在其他人的项目或开源项目中添加或更新代码之前,您应该首先环顾四周以确定他们使用的编码风格并尝试遵循相同的风格。以下是一些普遍接受的 android 编码标准,它们将帮助您编写干净的代码。

遵循的标准编码风格

1.使用制表符或 4 个空格正确缩进代码。

2.将大括号与前面的代码放在同一行,而不是单独一行。

例子:

Java
// This is Bad practice
class myClass1
{ 
  int func2()
  {
    //...
  }
}
  
// This is good practice
class MyClass {
    int func() {
        if(){
            //...
        }else{
            //...
        }
    }
}


Java
if (condition) {
    body();
}
  
// can be written as 
if(condition) body();
  
// But not like
if(condition)
    body(); // Bad Practice


Java
// TODO: Use boolean Flag instead of int constant.


Java
@Deprecated 
// used to mark component which no longer should be used.
  
@Override 
// used to tell that declared method overrides method in superclass.
  
@Nullable
// tells that parameter, return value of method or field can be null.
  
@NonNull
// tells that parameter, return value of method or field can not be null.


Java
int i = 0;
  
// bad practice
for(i= 0; i< 10; i++) 
    
// Good practice
for(int i=0; i<10; i++){ 
    // do your work
}
  
// good practice
for(Iterator i = c.iterator(); i.hasNext()){
    // do your work
}


3.如果条件和身体适合在一条线上,你可以把它放在一条线上。

例子:

Java

if (condition) {
    body();
}
  
// can be written as 
if(condition) body();
  
// But not like
if(condition)
    body(); // Bad Practice

4.对临时的、短期的解决方案或足够好但不完美的代码使用 TODO 注释。这些注释应包括全部大写的字符串“TODO”,后跟一个冒号。

例子:

Java

// TODO: Use boolean Flag instead of int constant.

5. switch case 应该总是有一个“默认”语句来捕获意外值。

6.在需要时在代码中使用标准的预定义注释。

例子:

Java

@Deprecated 
// used to mark component which no longer should be used.
  
@Override 
// used to tell that declared method overrides method in superclass.
  
@Nullable
// tells that parameter, return value of method or field can be null.
  
@NonNull
// tells that parameter, return value of method or field can not be null.

处理异常

  • 即使您非常确定该异常永远不会发生,也不应该将您的 catch 块留空。
  • 尝试单独捕获异常,不要捕获泛型异常。
    • 尝试对可能导致不同异常的语句使用不同的“try”块。例如-将解析语句与输入语句分开到单独的“尝试”块中。
  • 如果您对忽略异常有信心,那么您应该添加适当的注释来解释为什么可以忽略异常,

循环

示例:在 for 循环本身中声明迭代变量。

Java

int i = 0;
  
// bad practice
for(i= 0; i< 10; i++) 
    
// Good practice
for(int i=0; i<10; i++){ 
    // do your work
}
  
// good practice
for(Iterator i = c.iterator(); i.hasNext()){
    // do your work
}

要遵循的标准命名规则

编码中的命名约定:

  • 非静态、非公共(即私有、默认和受保护)字段名称应以 m、Ex.- int mVar 开头。
  • 静态字段名称应以 s 开头,例如 - private static int sVar。
  • 公共字段应以小写字母Ex.-public int var 开头。
  • 公共静态最终字段或常量应全部大写并带有下划线,例如 - public static final int MY_CONSTANT = 42。
  • 类或接口名称应始终以大写字母开头,更改单词的第一个字母也应大写Ex.- MyClass、MyInterface、MyCustomViewClass
  • 类应该在顶部有注释,清楚地说明类创建的目的。函数也一样。
  • 函数名应始终以小写字母开头,变化单词的首字母大写。例如-公共 int 注册新用户(),

XML 中的命名约定:

  • 布局文件应与预期的 Android 组件的名称相匹配。例如- LoginActivity.class 的布局文件应该是 nam
  • 编辑为 activity_login.xml。
  • 当我们创建一个将被适配器膨胀的布局时,即填充 ListView 或 RecyclerView。在这种情况下,布局的名称应以“item_”开头,例如- item_contact_card.xml。
  • 布局资源 ID 应尽可能使用命名约定:<布局名称>_<对象类型>_<对象名称>,例如-profile_imageview_avatar。
  • 在字符串.xml 中定义字符串时,字符串的名称应遵循以下语法:<目的>_例如-< 字符串 name=”hint_login_id”>输入您的登录 ID
  • 可绘制文件应命名为 _,用于图标、按钮和操作栏的前缀分别为 ic_、btn_、ab_。例如 - btn_sign_up.xml、dialog_warning.xml、menu_primary.xml。

处理资源

项目中正在使用的所有资源都应在应用程序的“res”文件夹中定义,格式如下:

  • 如果您需要在应用程序中使用字符串值,则应在“res/values/ 字符串”中定义。
  • 如果您需要在应用程序中使用颜色,则应在“res/values/colors.xml”中定义。
  • 如果您需要在应用程序中使用静态数组,则应在“res/values/arrays.xml”中定义。
  • 如果您需要在应用程序中使用静态维度,则应在“res/values/dimens.xml”中定义它们。
  • 如果您需要为应用程序中使用的组件使用特定或自定义样式,则应在“res/values/styles.xml”中定义。