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
  • 这样可以直接在下方工具栏提交代码,避免弹窗干扰。
相关推荐
恋猫de小郭4 小时前
Flutter 发布官方 Skills ,Flutter 在 AI 领域再添一助力
android·前端·flutter
Kapaseker9 小时前
一杯美式搞懂 Any、Unit、Nothing
android·kotlin
黄林晴10 小时前
你的 Android App 还没接 AI?Gemini API 接入全攻略
android
恋猫de小郭20 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
冬奇Lab21 小时前
PowerManagerService(上):电源状态与WakeLock管理
android·源码阅读
BoomHe1 天前
Now in Android 架构模式全面分析
android·android jetpack
二流小码农1 天前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos
鹏程十八少1 天前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
Kapaseker1 天前
一杯美式搞定 Kotlin 空安全
android·kotlin
三少爷的鞋1 天前
Android 协程时代,Handler 应该退休了吗?
android