Skip to content

Commit 70dd768

Browse files
committed
优化阅读排版
纠正一些描述
1 parent f0c2fa2 commit 70dd768

File tree

1 file changed

+116
-79
lines changed

1 file changed

+116
-79
lines changed

README.md

Lines changed: 116 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
* 2021 年 2 月 5 日:[添加码云地址](https://github.com/getActivity/AndroidCodeStandard/commits/master)
2828

29-
* 2021 年 2 月 5日[第一次提交代码](https://github.com/getActivity/AndroidCodeStandard/commit/490a8d3e3695dd30a952ded71969fda83daaa58c)
29+
* 2021 年 2 月 5 日[第一次提交代码](https://github.com/getActivity/AndroidCodeStandard/commit/490a8d3e3695dd30a952ded71969fda83daaa58c)
3030

3131
#### 目录
3232

@@ -82,7 +82,7 @@
8282

8383
* 那么你的疑问可能又来了,怎么样才能算好的代码规范,答案只有一个,真正好的代码规范就是别人的代码你一眼就能看懂,更不需要反复去看。之所以这样并不是因为看的人 Review 代码的能力有多强,而是写代码的人愿意遵守规则,他知道自己想这么写,但是知道你会看不懂,所以换了一种方式来写,这种方式就是**代码规范**
8484

85-
* 代码规范:一个好的代码规范可以帮助我们快速了解和熟悉相关的业务,降低后续维护的成本(二次开发和排查问题)。
85+
* 代码规范:一个好的代码规范可以帮助我们快速了解和熟悉相关的业务,降低后续维护的成本(二次开发或者排查问题)。
8686

8787
* 代码不规范:代码不规范会导致项目可读性变差,具体表现为**难分辨和难理解**,在无形之中加大项目后续维护的成本。
8888

@@ -94,7 +94,7 @@
9494

9595
* 字符串比较,应该用 `"xxx".equals(object)`,而不应该用 `object.equals("xxx")`,因为 **object** 对象可能为空,我们应该把不为空的条件放置在表达式的前面。
9696

97-
* 尽量采用 **switch case** 来判断,如果不能实现则再考虑用 **if else**因为在多条件判断下 **switch case** 更加简洁
97+
* 尽量采用 **switch case** 来判断,如果不能实现则再考虑用 **if else**因为在多条件下使用 **switch case** 语句判断会更加简洁
9898

9999
* 不推荐用 **layout_marginLeft**,而应该用 **layout_marginStart**;不推荐用 **layout_marginRight**,而应该用 **layout_marginEnd**,原因有两个,一个是适配 Android 4.4 **反方向特性**(可在开发者选项中开启),第二个是 XML 布局中使用 **layout_marginLeft****layout_marginRight** 会有代码警告,**padding** 属性也是同理,这里不再赘述。
100100

@@ -116,7 +116,7 @@
116116

117117
* 每个小组成员应当安装[阿里巴巴代码约束插件](https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines),并及时地对插件所提示的**代码警告**进行处理或者抑制警告。
118118

119-
* 应用图标应该放在 **mipmap** 目录下,其他图片资源应当放到 **drawable** 目录下,具体原因可以看[谷歌官方文档的介绍](https://developer.android.google.cn/guide/topics/resources/providing-resources)对这两个文件夹给出的介绍:
119+
* 应用图标应该放在 **mipmap** 目录下,其他图片资源应当放到 **drawable** 目录下,具体原因可以看[谷歌官方文档](https://developer.android.google.cn/guide/topics/resources/providing-resources)对这两个文件夹给出的介绍:
120120

121121
| 目录 | 资源类型 |
122122
| :---------- | :----------------------------------------------------------- |
@@ -147,53 +147,74 @@
147147

148148
* 局部变量应用作用来命名,举个栗子:
149149

150-
* `String name`
151-
152-
* `TextView nameView`
153-
154-
* `FrameLayout nameLayout`
155-
156-
* 命名规范附带技巧(当布局中同个类型的控件只有一个的时候,也可以这样命名)
150+
```java
151+
String name;
157152

158-
* `TextView textView`
159-
160-
* `RecyclerView recyclerView`
153+
TextView nameView;
154+
155+
FrameLayout nameLayout;
156+
```
157+
158+
---
159+
160+
```java
161+
// 命名规范附带技巧(当布局中同个类型的控件只有一个的时候,也可以这样命名)
162+
163+
TextView textView;
164+
165+
RecyclerView recyclerView;
166+
```
161167

162168
* 成员变量必须以小 **m** 开头,举个栗子:
163169

164-
* `String mName`
165-
166-
* `TextView mNameView`
167-
168-
* `FrameLayout mNameLayout`
170+
```java
171+
String mName;
169172

170-
* 命名规范附带技巧(当布局中同个类型的控件只有一个的时候,也可以这样命名)
171-
172-
* `TextView mTextView`
173-
174-
* `RecyclerView mRecyclerView`
173+
TextView mNameView;
174+
175+
FrameLayout mNameLayout;
176+
```
177+
178+
---
179+
180+
```java
181+
// 命名规范附带技巧(当布局中同个类型的控件只有一个的时候,也可以这样命名)
182+
183+
TextView mTextView;
184+
185+
RecyclerView mRecyclerView;
186+
```
175187

176188
* 布尔值命名规范,命名不应该以 **is** 开头,举个栗子:
177189

178-
* 错误写法示例:
179-
180-
* 成员变量:`private boolean mIsDebug = false;`
181-
182-
* 局部变量:`boolean isDebug = false;`
183-
184-
* 正确写法示例:
185-
186-
* 成员变量:`private boolean mDebug = false;`
187-
188-
* 局部变量:`boolean debug = false;`
190+
```java
191+
// 错误写法示例
192+
193+
private boolean mIsDebug = false;
194+
195+
boolean isDebug = false;
196+
```
197+
---
198+
199+
```java
200+
// 正确写法示例
201+
202+
private boolean mDebug = false;
203+
204+
boolean debug = false;
205+
```
189206
190207
* 静态变量则用小 **s** 开头,举个栗子:
191208

192-
* `static Handler sHandler`
209+
```java
210+
static Handler sHandler;
211+
```
193212

194213
* 常量则需要用大写,并且用下划线代替驼峰,举个栗子:
195214

196-
* `static final String REQUEST_INSTALL_PACKAGES"`
215+
```java
216+
static final String REQUEST_INSTALL_PACKAGES;
217+
```
197218

198219
* 有细心的同学可能会发现一个问题,为什么我们最常用的 Glide 和 OkHttp 的源码为什么没有用字母 `m` 来区分局部变量和成员变量?但是谷歌的 SDK 源码和 Support 库就有呢?那究竟是用还是不用呢?这个问题其实很好回答,我们可以先从体量上分析,首先谷歌的开发人员和项目数量肯定是最多的,那么谷歌在这块的探索和研究肯定是多于 Glie 和 OkHttp 的,其次是 Glide 和 OkHttp 的源码都有一个特点,很多类都维持在 1k 行代码左右,而谷歌源码很多类都接近 10k 行代码,例如 Activity 的源码在 API 30 上面有 8.8k 行代码,所以谷歌在这块略胜一筹,如果非要二选一,我选择谷歌的代码风格,并不是说 Glide 和 OkHttp 命名风格不好,是因为或许在未来的某一天,可能会有新的图片请求框架和网络请求框架来代替 Glide 和 OkHttp,但是基本不可能会出现有代替 Android SDK 或者 Support 库的一天。
199220

@@ -294,21 +315,25 @@ public class Activity {
294315

295316
* 业务模块请以 **模块 + 类型** 来命名,举个栗子
296317

297-
* `HomeActivity.java`
298-
299-
* `SettingFragment.java`
300-
301-
* `HomeAdapter.java`
318+
```text
319+
HomeActivity.java
320+
321+
SettingFragment.java
322+
323+
HomeAdapter.java
302324
303-
* `AddressDialog.java`
325+
AddressDialog.java
326+
```
304327

305328
* 技术模块请以类的 **作用** 来命名,举个栗子
306329

307-
* `CrashHandler.java`
330+
```text
331+
CrashHandler.java
308332
309-
* `GridSpaceDecoration.java`
333+
GridSpaceDecoration.java
310334
311-
* `PickerLayoutManager.java`
335+
PickerLayoutManager.java
336+
```
312337

313338
#### 接口文件命名规范
314339

@@ -348,49 +373,58 @@ public class Handler {
348373

349374
*`模块` + `类型` 来命名,举个栗子:
350375

351-
* `home_activity.xml`
352-
353-
* `setting_fragment.xml`
354-
355-
* `menu_item.xml`
356-
357-
* `address_dialog.xml`
376+
```text
377+
home_activity.xml
378+
379+
setting_fragment.xml
380+
381+
menu_item.xml
382+
383+
address_dialog.xml
384+
```
358385

359386
* 这样写的好处在于,由于 res 文件夹下是没有层级概念的
360387

361388
* 通过前缀的命名可以帮助我们更好定位到同一模块下的资源
362389

363390
* 例如分享对话框中,有对话框 Root 布局和 Item 布局
364391

365-
* `share_dialog.xml`(Root 布局)
392+
```text
393+
share_dialog.xml(Root 布局)
366394
367-
* `share_item.xml`(Item 布局)
395+
share_item.xml(Item 布局)
396+
```
368397

369398
#### 资源文件命名规范
370399

371400
* 如果是业务模块下的资源,以 **模块 + 类型** 来命名,例如分享对话框的资源:
372401

373-
* `share_link_ic.png`(复制链接)
402+
```text
403+
share_link_ic.png(复制链接)
374404
375-
* `share_moment_ic.png`(分享到朋友圈)
405+
share_moment_ic.png(分享到朋友圈)
376406
377-
* `share_qq_ic.png`(分享到 QQ 好友)
407+
share_qq_ic.png(分享到 QQ 好友)
378408
379-
* `share_qzone_ic.png`(分享到 QQ 空间)
409+
share_qzone_ic.png(分享到 QQ 空间)
380410
381-
* `share_wechat_ic.png`(分享到微信好友)
411+
share_wechat_ic.png(分享到微信好友)
412+
```
382413

383414
* 如果和业务模块不相干的资源,以 **作用 + 类型** 来命名,例如通用的控件样式资源:
384415

385-
* `button_rect_selector.xml`(通用直角按钮样式)
416+
```text
417+
button_rect_selector.xml(通用直角按钮样式)
418+
419+
button_round_selector.xml(通用圆角按钮样式)
420+
```
386421

387-
* `button_round_selector.xml`(通用圆角按钮样式)
388422

389-
* 这种资源有一个共同特点,它不属于哪个模块,但是在不同模块都有用到,所以不能用业务的模块名作为文件名前缀
423+
* 这种资源有一个共同特点,它不属于哪个模块,但是在不同模块都有用到,所以不能用业务的模块名作为文件名前缀
390424

391425
#### 接口实现规范
392426

393-
* 一般情况下,我们会在类中这样实现接口,这样写的好处是,可以减少对象的创建,并且代码也比较美观
427+
* 一般情况下,我们会在类中这样实现接口,这样写的好处是,可以减少对象的创建,并且代码也比较美观
394428

395429
```java
396430
public final class PasswordEditText extends EditText
@@ -431,7 +465,7 @@ public final class PasswordEditText extends EditText
431465
}
432466
```
433467

434-
* 但是有一个美中不足的地方,就是在实现的接口过多时,我们很难分辨是哪个方法是哪个接口的,这个时候可以使用注释的方式来解决这个问题,加上 **@link** 还可以帮助我们快速定位接口类在项目中所在的位置
468+
* 但是有一个美中不足的地方,就是在实现的接口过多时,我们很难分辨是哪个方法是哪个接口的,这个时候可以使用注释的方式来解决这个问题,加上 **@link** 还可以帮助我们快速定位接口类在项目中所在的位置
435469

436470
```java
437471
public final class PasswordEditText extends EditText
@@ -730,21 +764,21 @@ fragment.setRetainInstance(true);
730764

731765
* 应用到某个模块 **View**,举个栗子
732766

733-
```xml
767+
```text
734768
login_left_balloon_view.xml
735769
login_right_balloon_view.xml
736770
```
737771

738772
* 应用到全局 **Activity**,举个栗子
739773

740-
```xml
774+
```text
741775
left_in_activity.xml
742776
left_out_activity.xml
743777
```
744778

745779
* 应用到全局 **Dialog**,举个栗子
746780

747-
```xml
781+
```text
748782
bottom_in_dialog.xml
749783
bottom_out_dialog.xml
750784
```
@@ -753,7 +787,7 @@ bottom_out_dialog.xml
753787

754788
* 应该以 **控件的缩写 + 模块名 + 作用** 来命名,例如
755789

756-
```xml
790+
```text
757791
@+id/R.id.rg_login_type
758792
759793
@+id/R.id.et_login_phone
@@ -924,14 +958,6 @@ bottom_out_dialog.xml
924958

925959
* 应该在布局文件根布局中定义 `tools:context` 属性,以便在布局文件中快速定位到对应的类
926960

927-
* `tools:context=".ui.activity.HomeActivity"`
928-
929-
* `tools:context=".ui.fragment.SettingFragment"`
930-
931-
* `tools:context=".ui.adapter.HomeAdapter"`
932-
933-
* `tools:context=".ui.dialog.PersonDataDialog"`
934-
935961
```xml
936962
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
937963
xmlns:app="http://schemas.android.com/apk/res-auto"
@@ -943,6 +969,17 @@ bottom_out_dialog.xml
943969
</FrameLayout>
944970
```
945971

972+
---
973+
974+
```text
975+
tools:context=".ui.activity.HomeActivity"
976+
977+
tools:context=".ui.fragment.SettingFragment"
978+
979+
tools:context=".ui.adapter.HomeAdapter"
980+
981+
tools:context=".ui.dialog.PersonDataDialog"
982+
```
946983

947984
* 此外,tools 属性还有各种各样的用途,例如 RecyclerView 的 **tools** 属性
948985

@@ -1011,12 +1048,12 @@ bottom_out_dialog.xml
10111048

10121049
* 日志查看框架:[Logcat](https://github.com/getActivity/Logcat)
10131050

1014-
#### Android技术讨论Q群:78797078
1015-
10161051
#### 微信公众号:Android轮子哥
10171052

10181053
![](https://raw.githubusercontent.com/getActivity/Donate/master/picture/official_ccount.png)
10191054

1055+
#### Android 技术分享 QQ 群:78797078
1056+
10201057
#### 如果您觉得我的开源库帮你节省了大量的开发时间,请扫描下方的二维码随意打赏,要是能打赏个 10.24 :monkey_face:就太:thumbsup:了。您的支持将鼓励我继续创作:octocat:
10211058

10221059
![](https://raw.githubusercontent.com/getActivity/Donate/master/picture/pay_ali.png) ![](https://raw.githubusercontent.com/getActivity/Donate/master/picture/pay_wechat.png)

0 commit comments

Comments
 (0)