Skip to content

Commit 692ada0

Browse files
committed
新增代码美观性要求
1 parent 0128015 commit 692ada0

File tree

2 files changed

+222
-13
lines changed

2 files changed

+222
-13
lines changed

.gitignore

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
/.gradle
2-
/.idea
3-
/build
4-
*/build
5-
/captures
6-
/.cxx
7-
*/.cxx
8-
/.externalNativeBuild
1+
.gradle
2+
.idea
3+
.cxx
4+
.externalNativeBuild
5+
build
6+
captures
97

108
._*
119
*.iml

README.md

Lines changed: 216 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
* 码云地址:[Gitee](https://gitee.com/getActivity/AndroidCodeStandard)
44

5-
* 鸿洋力推[荐一份 Android 代码规范建议文档](https://mp.weixin.qq.com/s/Zv1zVom69RFrMJ1q8tP8Lw)
5+
* 鸿洋力荐[荐一份 Android 代码规范建议文档](https://mp.weixin.qq.com/s/Zv1zVom69RFrMJ1q8tP8Lw)
66

77
* 做开源几年了,被很多人夸过,你的代码写得比较规范,[甚至有人质疑自己代码的写法](https://github.com/getActivity/AndroidProject/issues/55),但是迟迟没有出一个代码规范,说来惭愧,只是因为我早几年写的代码还不够规范,不敢出来误导大家,而代码规范是后续才慢慢养成的,在这个过程中,我不仅参考了大公司出的代码规范文档,也研究了很多关于谷歌源码的编码规范,同时我也在无时不刻在思考,如何能写出让别人更好理解的代码,自打入行以来,我就在一直在这个问题上面探索。
88

@@ -20,7 +20,7 @@
2020

2121
* 2021 年 3 月 11 日:[新增版本命名规范](https://github.com/getActivity/AndroidCodeStandard/commit/68f242c839ae040aaf4624fb8243137366b89cc9)
2222

23-
* 2021 年 2 月 23 日:[补充代码规范原则补充参数传递规范](https://github.com/getActivity/AndroidCodeStandard/commit/1a1ad4a7c26ff75e588b689c51ab126fe32c78a1)
23+
* 2021 年 2 月 23 日:[<br>补充代码规范原则<br>补充参数传递规范](https://github.com/getActivity/AndroidCodeStandard/commit/1a1ad4a7c26ff75e588b689c51ab126fe32c78a1)
2424

2525
* 2021 年 2 月 21 日:[<br>补充多模块规范<br>补充代码硬编码规范<br>补充资源硬编码规范<br>补充 Color ID 命名规范<br>补充写代码规范文档的原因<br>纠正公开成员变量命名方式<br>添加谷歌代码样式指南链接](https://github.com/getActivity/AndroidCodeStandard/commit/be4847c2c476031484bac97dec036228900e2f60)
2626

@@ -70,6 +70,8 @@
7070

7171
* [参数传递规范](#参数传递规范)
7272

73+
* [代码美观性要求](#代码美观性要求)
74+
7375
* [第三方框架使用规范](#第三方框架使用规范)
7476

7577
* [多模块规范](#多模块规范)
@@ -116,7 +118,7 @@
116118

117119
#### 代码规范原则
118120

119-
* 在讲之前,我们先想一个问题,代码规范的出现是为了什么?不就为了让我们更好地进行团队协作和项目维护吗?没错的,所以代码规范原则应该围绕这两点进行
121+
* 在讲之前,我们先想一个问题,代码规范的出现是为了什么?不就为了让我们更好地进行团队协作和项目维护吗?没错的,所以代码规范原则应该围绕这两个目标进行
120122

121123
* **特事特办**:代码规范文档只能解决 **99.99%** 场景下的问题,特殊情况应该要特殊处理,违背者需要给出**合理的解释**,建议在代码中直接**用注释注明**,这样可以**减少沟通成本**,否则在一般情况下应当要遵守代码规范文档上的约束。
122124

@@ -735,13 +737,222 @@ new VideoPlayActivity.Builder()
735737
.start(getAttachActivity());
736738
```
737739

740+
#### 代码美观性要求
741+
742+
* 第一个大括号应当统一放在表达式后面,而不应该换行处理,例如:
743+
744+
```java
745+
// 不规范写法示例
746+
if (AppConfig.isDebug())
747+
{
748+
......
749+
}
750+
```
751+
752+
```java
753+
// 规范写法示例
754+
if (AppConfig.isDebug()) {
755+
......
756+
}
757+
```
758+
759+
* 代码之间应当有适当的空格,空格不用多也不能少,恰到好处即可,例如:
760+
761+
```java
762+
// 不规范写法示例
763+
public static boolean isAppInstalled(Context context ,String packageName ){
764+
try {
765+
context.getPackageManager().getApplicationInfo(packageName,0);
766+
return true;
767+
}catch( PackageManager.NameNotFoundException e ){
768+
e.printStackTrace();
769+
return false ;
770+
}
771+
}
772+
```
773+
774+
```java
775+
// 规范写法示例
776+
public static boolean isAppInstalled(Context context, String packageName) {
777+
try {
778+
context.getPackageManager().getApplicationInfo(packageName, 0);
779+
return true;
780+
} catch (PackageManager.NameNotFoundException e) {
781+
e.printStackTrace();
782+
return false;
783+
}
784+
}
785+
```
786+
787+
* 适当换行有助于提升代码的可读性,在单行代码较长的情况下可以考虑换行,例如:
788+
789+
```java
790+
// 不规范写法示例
791+
ScaleAnimation animation = new ScaleAnimation(1.0f, 1.1f, 1.0f, 1.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
792+
textView.startAnimation(animation);
793+
```
794+
795+
```java
796+
// 规范写法示例
797+
ScaleAnimation animation = new ScaleAnimation(1.0f, 1.1f, 1.0f, 1.1f,
798+
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
799+
textView.startAnimation(animation);
800+
```
801+
802+
* 链式写法不能只用一行代码,而是应当遵守一句 API 换一行的策略,例如:
803+
804+
```java
805+
// 不规范写法示例
806+
GlideApp.with(this).load(url).circleCrop().into(imageView);
807+
```
808+
809+
```java
810+
// 规范写法示例
811+
GlideApp.with(this)
812+
.load(url)
813+
.circleCrop()
814+
.into(imageView);
815+
```
816+
817+
* 方法参数的排序,上下文参数应当统一放在最前面,而回调监听应当统一放在最后面,例如:
818+
819+
```java
820+
public void openSystemFileChooser(Activity activity, FileChooserParams params, ValueCallback<Uri[]> callback) {
821+
......
822+
}
823+
```
824+
825+
* 变量和方法的排序,应当根据重要程度、API 类型、执行顺序这几点来摆放,例如:
826+
827+
```java
828+
// 变量排序示例
829+
public class BaseDialog {
830+
831+
public static class Builder<B extends BaseDialog.Builder<?>>
832+
833+
/** 宽度和高度 */
834+
private int mWidth = WindowManager.LayoutParams.WRAP_CONTENT;
835+
private int mHeight = WindowManager.LayoutParams.WRAP_CONTENT;
836+
837+
/** 是否能够被取消 */
838+
private boolean mCancelable = true;
839+
/** 点击空白是否能够取消 前提是这个对话框可以被取消 */
840+
private boolean mCanceledOnTouchOutside = true;
841+
842+
/** 背景遮盖层开关 */
843+
private boolean mBackgroundDimEnabled = true;
844+
/** 背景遮盖层透明度 */
845+
private float mBackgroundDimAmount = 0.5f;
846+
847+
/** Dialog 创建监听 */
848+
private BaseDialog.OnCreateListener mCreateListener;
849+
/** Dialog 显示监听 */
850+
private final List<BaseDialog.OnShowListener> mShowListeners = new ArrayList<>();
851+
/** Dialog 取消监听 */
852+
private final List<BaseDialog.OnCancelListener> mCancelListeners = new ArrayList<>();
853+
/** Dialog 销毁监听 */
854+
private final List<BaseDialog.OnDismissListener> mDismissListeners = new ArrayList<>();
855+
/** Dialog 按键监听 */
856+
private BaseDialog.OnKeyListener mKeyListener;
857+
}
858+
}
859+
```
860+
861+
```java
862+
// 方法排序示例
863+
public class BaseDialog {
864+
865+
public static class Builder<B extends BaseDialog.Builder<?>>
866+
867+
/**
868+
* 设置宽度
869+
*/
870+
public B setWidth(int width) {
871+
......
872+
}
873+
874+
/**
875+
* 设置高度
876+
*/
877+
public B setHeight(int height) {
878+
......
879+
}
880+
881+
/**
882+
* 是否可以取消
883+
*/
884+
public B setCancelable(boolean cancelable) {
885+
......
886+
}
887+
888+
/**
889+
* 是否可以通过点击空白区域取消
890+
*/
891+
public B setCanceledOnTouchOutside(boolean cancel) {
892+
......
893+
}
894+
895+
/**
896+
* 设置背景遮盖层开关
897+
*/
898+
public B setBackgroundDimEnabled(boolean enabled) {
899+
......
900+
}
901+
902+
/**
903+
* 设置背景遮盖层的透明度(前提条件是背景遮盖层开关必须是为开启状态)
904+
*/
905+
public B setBackgroundDimAmount(float dimAmount) {
906+
......
907+
}
908+
909+
/**
910+
* 设置创建监听
911+
*/
912+
public B setOnCreateListener(BaseDialog.OnCreateListener listener) {
913+
......
914+
}
915+
916+
/**
917+
* 添加显示监听
918+
*/
919+
public B addOnShowListener(BaseDialog.OnShowListener listener) {
920+
......
921+
}
922+
923+
/**
924+
* 添加取消监听
925+
*/
926+
public B addOnCancelListener(BaseDialog.OnCancelListener listener) {
927+
......
928+
}
929+
930+
/**
931+
* 添加销毁监听
932+
*/
933+
public B addOnDismissListener(BaseDialog.OnDismissListener listener) {
934+
......
935+
}
936+
937+
/**
938+
* 设置按键监听
939+
*/
940+
public B setOnKeyListener(BaseDialog.OnKeyListener listener) {
941+
......
942+
}
943+
}
944+
}
945+
```
946+
947+
* 代码美观性虽然不会干扰到业务的正常进行,但是对一个程序员来讲,它是对技术的一种追求和热爱,同时也是工匠精神的体现。
948+
738949
#### 第三方框架使用规范
739950

740951
* 集成一些第三方框架或者 SDK,必须注明作用和出处,以便出现问题时能够快速核查和反馈。
741952

742953
```groovy
743954
// 权限请求框架:https://github.com/getActivity/XXPermissions
744-
implementation 'com.hjq:xxpermissions:9.8'
955+
implementation 'com.hjq:xxpermissions:10.6'
745956
```
746957

747958
* 尽量不要选择功能两套相同的框架,应当引用最合适的一套框架进行开发。
@@ -1256,7 +1467,7 @@ bottom_out_dialog.xml
12561467
android:textSize="18dp" />
12571468
```
12581469

1259-
```
1470+
```xml
12601471
<!-- 规范写法示例 -->
12611472
<TextView
12621473
android:layout_width="wrap_content"

0 commit comments

Comments
 (0)