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 值可按需修改。
xml
<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 中对应的值可按需修改。
xml
<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)开头添加:
kotlin
/**
* @Author: san.zhang
* @Date: ${DATE}-${TIME}
* @Description:
*/

4.2 已有类文件快捷添加类注释
- 1)打开 File -> Settings -> Editor -> Live Templates
- 2)在 Android 分组下添加新的 Live Template
- 3)Template Text 配置:
kotlin
/**
* @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 格式化 when 会自动换行,可通过 Code Style -> Kotlin 调整相关参数。
5.2 XML 文件格式化顺序
- 如果格式化 XML 后标签顺序被打乱,可在 Code Style -> XML 中配置属性排序规则,保持布局文件一致性。
5.3 标签页多行显示
- 打开多个文件时,可在 Settings -> Editor -> General -> Editor Tabs 勾选 Show tabs in multiple rows,提高文件切换效率。
5.4 打开 Git 的 Local Changes 显示
- 建议关闭 modal commit interface:
- Settings -> Advanced Settings -> Version Control -> Use modal commit interface for Git and Mercurial
- 这样可以直接在下方工具栏提交代码,避免弹窗干扰。