Android Studio 格式规范

83 阅读3分钟

Android Studio 格式规范

1 前言

  • 随着团队规模的扩大、项目数量的增加,如果每位开发者使用的代码风格不一致,将会影响代码的可读性、可维护性,并增加代码冲突与历史记录查找的成本。
  • 为了确保代码风格统一,提升项目质量和协作效率,特制定本规范。

2 代码风格规范

2.1 格式化原则

  • 提交代码前必须执行 “格式化” 操作,重要的事说三遍!
  • 统一的格式化配置可避免因个人 IDE 设置不同而导致的代码冲突和历史记录混乱。

2.2 配置格式化模板

  • 1)打开 File -> Settings -> Editor -> Code Style
  • 2)点击右上角 齿轮图标 -> Import Scheme,导入团队统一的 TestAndroid.xml 配置文件。 image1.png
  • 3)每次修改代码后执行以下操作:
    • 格式化代码:File -> Keymap -> Reformat Code(快捷键可自行设置)
    • 优化 import:File -> Keymap -> Rearrange Code(删除无效 import) image2.png
  • 注意:完整 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 image3.png
  • 3)在 File -> Settings -> Editor -> Copyright 中将该模板设置为 默认模板image4.png
  • 注意:完整 TestCopyright.xml 配置文件已附在文档末尾,可直接保存成文件并导入,且 value 中对应的值可按需修改。
<component name="CopyrightManager">
    <copyright>
        <option name="notice" value="Copyright (c) &amp;#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:  
 */

image5.png

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 键)即可快速生成注释。 image6.png image7.png

5 其它推荐配置

5.1 Kotlin when 函数换行问题

  • 用途:部分版本的 Android Studio 在格式化 Kotlin 代码时,when 表达式会被自动换行,影响代码可读性。
  • 设置方法
    • 1)打开 File -> Settings -> Editor -> Code Style -> Kotlin
    • 2)根据实际需求调整换行与缩进规则(可修改 Wrapping and Braces 相关选项)
  • 注意事项:修改后需重新格式化代码才会生效。 image8.png

5.2 XML 文件格式化顺序

  • 用途:Android Studio 格式化 XML 时,可能会打乱属性顺序,影响布局文件一致性。
  • 设置方法
    • 1)打开 File -> Settings -> Editor -> Code Style -> XML
    • 2)在 Arrangement 选项卡中配置属性排序规则
  • 注意事项:可根据团队统一规范配置排序规则,并导出 XML 代码风格文件供全员使用。 image9.png

5.3 标签页多行显示

  • 用途:当同时打开多个文件时,标签栏可能被压缩成滚动模式,多行显示可提升文件切换效率。
  • 设置方法
    • 1)打开 File -> Settings -> Editor -> General -> Editor Tabs
    • 2)勾选 Show tabs in multiple rows
  • 注意事项:多行标签会占用更多垂直空间,适合高分辨率或多显示器环境。 image10.png

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 功能。

image11.png

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 时使用,平时建议关闭以提升同步速度。 image12.png image13.png