Android Studio 格式规范
1 前言
- 随着团队规模的扩大、项目数量的增加,如果每位开发者使用的代码风格不一致,将会影响代码的可读性、可维护性,并增加代码冲突与历史记录查找的成本。
- 为了确保代码风格统一,提升项目质量和协作效率,特制定本规范。
2 代码风格规范
2.1 格式化原则
- 提交代码前必须执行 “格式化” 操作,重要的事说三遍!
- 统一的格式化配置可避免因个人 IDE 设置不同而导致的代码冲突和历史记录混乱。
2.2 配置格式化模板
- 1)打开 File -> Settings -> Editor -> Code Style
- 2)点击右上角 齿轮图标 -> Import Scheme,导入团队统一的 TestAndroid.xml 配置文件。
- 3)每次修改代码后执行以下操作:
- 格式化代码:File -> Keymap -> Reformat Code(快捷键可自行设置)
- 优化 import:File -> Keymap -> Rearrange Code(删除无效 import)
- 注意:完整 TestAndroid.xml 配置文件已附在文档末尾,可直接保存成文件并导入,且内容中的 name 值可按需修改。
<code_scheme name="TestAndroid" version="173">
<option name="RIGHT_MARGIN" value="150" />
<AndroidXmlCodeStyleSettings>
<option name="VALUE_RESOURCE_FILE_SETTINGS">
<value>
<option name="WRAP_ATTRIBUTES" value="1" />
</value>
</option>
</AndroidXmlCodeStyleSettings>
<JetCodeStyleSettings>
<option name="SPACE_AROUND_RANGE" value="true" />
<option name="SPACE_BEFORE_EXTEND_COLON" value="false" />
<option name="INSERT_WHITESPACES_IN_SIMPLE_ONE_LINE_METHOD" value="false" />
<option name="SPACE_BEFORE_WHEN_PARENTHESES" value="false" />
<option name="CONTINUATION_INDENT_IN_PARAMETER_LISTS" value="false" />
<option name="CONTINUATION_INDENT_IN_ARGUMENT_LISTS" value="false" />
<option name="CONTINUATION_INDENT_FOR_EXPRESSION_BODIES" value="false" />
<option name="CONTINUATION_INDENT_FOR_CHAINED_CALLS" value="false" />
<option name="CONTINUATION_INDENT_IN_SUPERTYPE_LISTS" value="false" />
<option name="CONTINUATION_INDENT_IN_IF_CONDITIONS" value="false" />
<option name="CONTINUATION_INDENT_IN_ELVIS" value="false" />
<option name="WRAP_EXPRESSION_BODY_FUNCTIONS" value="1" />
</JetCodeStyleSettings>
<MarkdownNavigatorCodeStyleSettings>
<option name="RIGHT_MARGIN" value="72" />
</MarkdownNavigatorCodeStyleSettings>
<Objective-C>
<option name="INDENT_NAMESPACE_MEMBERS" value="2" />
<option name="INDENT_C_STRUCT_MEMBERS" value="2" />
<option name="INDENT_CLASS_MEMBERS" value="2" />
<option name="INDENT_INSIDE_CODE_BLOCK" value="2" />
</Objective-C>
<codeStyleSettings language="CMake">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="Groovy">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="HTML">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JAVA">
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="ALIGN_MULTILINE_RESOURCES" value="false" />
<option name="ALIGN_MULTILINE_FOR" value="false" />
<option name="WRAP_LONG_LINES" value="true" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JSON">
<indentOptions>
<option name="INDENT_SIZE" value="1" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="ObjectiveC">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="XML">
<option name="FORCE_REARRANGE_MODE" value="0" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="RIGHT_MARGIN" value="150" />
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="SPACE_AROUND_UNARY_OPERATOR" value="true" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="1" />
<option name="EXTENDS_LIST_WRAP" value="1" />
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
<option name="ASSIGNMENT_WRAP" value="1" />
<option name="PARAMETER_ANNOTATION_WRAP" value="1" />
<option name="VARIABLE_ANNOTATION_WRAP" value="1" />
<option name="ENUM_CONSTANTS_WRAP" value="1" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
</code_scheme>
3 版权信息配置
- 为保证版权声明一致,需要在每个新建文件中自动添加版权信息。
- 1)打开 File -> Settings -> Editor -> Copyright -> Copyright Profiles
- 2)导入统一的版权模板 TestCopyright.xml
- 3)在 File -> Settings -> Editor -> Copyright 中将该模板设置为 默认模板。
- 注意:完整 TestCopyright.xml 配置文件已附在文档末尾,可直接保存成文件并导入,且 value 中对应的值可按需修改。
<component name="CopyrightManager">
<copyright>
<option name="notice" value="Copyright (c) &#36;today.year. Beijing Test Education Ltd. All Rights Reserved." />
<option name="myName" value="Test" />
</copyright>
</component>
4 类注释配置
4.1 新建类文件自动生成类注释
- 1)打开 File -> Settings -> Editor -> File and Code Templates
- 2)在类文件模板(如 Class)开头添加:
/**
* @Author: san.zhang
* @Date: ${DATE}-${TIME}
* @Description:
*/
4.2 已有类文件快捷添加类注释
- 1)打开 File -> Settings -> Editor -> Live Templates
- 2)在 Android 分组下添加新的 Live Template
- 3)Template Text 配置:
/**
* @Author: san.zhang
* @Date: $DATE$-$TIME$
* @Description:
*/
- 4)在 Edit Variables 中设置:
- DATE -> date("yyyy/MM/dd")
- TIME -> time("HH:mm")
- 这样在已有文件中,只需输入该模板缩写并触发(如 Tab 键)即可快速生成注释。
5 其它推荐配置
5.1 Kotlin when 函数换行问题
- 用途:部分版本的 Android Studio 在格式化 Kotlin 代码时,when 表达式会被自动换行,影响代码可读性。
- 设置方法:
- 1)打开 File -> Settings -> Editor -> Code Style -> Kotlin
- 2)根据实际需求调整换行与缩进规则(可修改 Wrapping and Braces 相关选项)
- 注意事项:修改后需重新格式化代码才会生效。
5.2 XML 文件格式化顺序
- 用途:Android Studio 格式化 XML 时,可能会打乱属性顺序,影响布局文件一致性。
- 设置方法:
- 1)打开 File -> Settings -> Editor -> Code Style -> XML
- 2)在 Arrangement 选项卡中配置属性排序规则
- 注意事项:可根据团队统一规范配置排序规则,并导出 XML 代码风格文件供全员使用。
5.3 标签页多行显示
- 用途:当同时打开多个文件时,标签栏可能被压缩成滚动模式,多行显示可提升文件切换效率。
- 设置方法:
- 1)打开 File -> Settings -> Editor -> General -> Editor Tabs
- 2)勾选 Show tabs in multiple rows
- 注意事项:多行标签会占用更多垂直空间,适合高分辨率或多显示器环境。
5.4 打开 Git 的 Local Changes 显示
- 用途:关闭 Git 的 modal commit 界面,可在底部工具栏直接查看并提交本地更改,避免弹窗干扰。
- 设置方法:
- 1)打开 File -> Settings -> Advanced Settings -> Version Control
- 2)取消勾选 Use modal commit interface for Git and Mercurial
- 注意事项:该设置仅影响提交界面显示方式,不影响 Git 功能。
5.5 显示更多 Gradle Task
- 用途:Android Studio 默认在 Gradle 面板中只显示部分任务,启用此功能可在同步时配置并显示所有可用的 Gradle Task,方便查找和执行。
- 设置方法:
- 1)打开 File -> Settings -> Experimental
- 2)勾选 Configure all gradle tasks during Fradle Sync(this can make Gradle Sync slower)
- 3)同步 Gradle(Sync Now)后,即可在 Gradle 面板中看到更多任务。
- 注意事项:启用该选项可能会使 Gradle 同步时间变长,请在需要查看或执行隐藏 Task 时使用,平时建议关闭以提升同步速度。