Android Studio 格式规范

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) &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)开头添加:
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
  • 这样可以直接在下方工具栏提交代码,避免弹窗干扰。
相关推荐
BennuCTech1 小时前
Google ML Kit系列:在Android上实现OCR本地识别
android
什么都不懂95271 小时前
Android Lmkd
android
zhangphil2 小时前
Android Coil3视频封面抽取封面帧存Disk缓存,Kotlin
android·kotlin
猪哥帅过吴彦祖2 小时前
Flutter SizeTransition:让你的UI动画更加丝滑
android·flutter
张风捷特烈3 小时前
鸿蒙纪·Flutter卷#02 | 已有 Flutter 项目鸿蒙化 · 3.27.4 版
android·flutter·harmonyos
QING6186 小时前
Media3 ExoPlayer 快速实现背景视频播放(干货)
android·前端·kotlin
用户2018792831676 小时前
PengdingIntent之“我想要的很简单时光还在你还在”
android
weiwuxian6 小时前
js与原生通讯版本演进
android·前端
wayne2146 小时前
Android 跨应用广播通信全攻略
android