android 开发规范 (5) - android 资源

如何自定义资源文件夹

android 的文件目录结构都是使用默认的 gradle 中 android 这个插件的配置,其实我们可以自己去定义资源所在文件夹名和文件夹结构,实现自定义的关键点在于我们按照自己的习惯更改完之后,去通知 gradle 构建工具,这样 gradle 构建工具才可以找到资源文件。

比如我们想把资源文件夹结构设计成如下:


android 开发规范 (5) - android 资源_第1张图片
classify_dir.png

很简单,我们只需要我们修改所在项目或module中的 build.gradle 文件,添加如下资源文件的配置:

android {
    ...
    sourceSets {
        main {
            res.srcDirs('src/main/res', 'src/main/res_core', 'src/main/res_sub')
        }
    }
}

配置完之后,sync project 一下就成功了。


命名共性

  • android 中资源的命名都是全小写,多个单词之间使用 _ 连接。
  • 资源命名基本的套路是一样的,都是 :类型名 + 模块名 + 颜色值 / 用途,可能个别的有些差异,但是大体差不多都是这个规律

动画资源

动画资源文件放置:

  • 视图动画文件放在 res/anim/ 目录下
  • 属性动画文件放在 res/animator/ 目录下

动画文件命名:

  • 使用全小写 + _ 连接
  • 命名规则:模块名 + 效果名 / 类型名 + 方位 + 效果
    例如:refresh_progress.xml、market_cart_add.xml、market_cart_remove.xml , translation_top_in
  • 动画效果名统一规范:
名称 说明
fade_in 淡入
fade_out 淡出
push_down_in 从下方推入
push_down_out 从下方推出
push_left 推向左方
slide_in_from_top 从头部滑动进入
zoom_enter 变形进入
slide_in 滑动进入
shrink_to_middle 中间缩小

颜色资源

首先声明,res/colors 中的颜色我们都应该是定义的是颜色,而不是其他,在代码中我们知道一个类,一个方法只干一件事,那么我们在定义像颜色这些基础资源时一样值关心颜色这个基本的着眼点,其他的不要多做。

例如,以前我们有的人会像下面这样做,直接在颜色列表中定义以控件为区分的单位的颜色值,这里大家惯用的写法真的错了,第一违背了单一性原则,第二以以控件为区分单位来设置颜色应该是在主题 style 中干的事

  
      #FFFFFF
      #2A91BD
      #5F5F5F
      #939393
      #FFFFFF
      #FF9D2F
      ...
      #323232

所以呢,大家一定要分清楚在什么地方干什么事。使用这种格式,会非常容易重复定义 ARGB 值,而且如果应用要改变基色的话会非常困难。同时,这些定义是跟一些环境关联起来的,如 button 或者 comment,应该放到 style 主题列表中,而不是在 colors.xml 文件中。

相反,应该这样做:

  

      
      #FFFFFF
      #DBDBDB
      #939393
      #5F5F5F
      #323232

      
      #27D34D
      #2A91BD
      #FF9D2F
      #FF432F
  

向应用设计者那里要这个调色板,名称不需要跟 "green"、"blue" 等等相同。"brand_primary"、"brand_secondary"、"brand_negative" 这样的名字也是完全可以接受的。像这样规范的颜色很容易修改或重构,会使应用一共使用了多少种不同的颜色变得非常清晰。通常一个具有审美价值的 UI 来说,减少使用颜色的种类是非常重要的。

注意:如果某些颜色和主题有关,那就单独写一个 colors_theme.xml。


dimens 资源

像对待 colors.xml 一样对待 dimens.xml 文件,与定义颜色调色板一样,你同时也应该定义一个空隙间隔和字体大小的“调色板”。 一个好的例子,如下所示:



    
    22sp
    18sp
    15sp
    12sp

    
    40dp
    24dp
    14dp
    10dp
    4dp

    
    60dp
    40dp
    32dp


布局时在写 margins 和 paddings 时,你应该使用 spacing_xx 尺寸格式来布局,而不是像对待 string 字符串一样直接写值,像这样规范的尺寸很容易修改或重构,会使应用所有用到的尺寸一目了然。 这样写会非常有感觉,会使组织和改变风格或布局非常容易。


图片资源

  • 图片资源文件放置:
    • res/mipmap/ 目录下只放启动图标
    • res/drawable/ 目录下放的是位图文件,如 .png、.9.png、.jpg、.gif ,或者是 矢量图
  • 命名规则:类型 + 模块名 +逻辑名称 / 颜色
    例如下表:
名称 说明
btn_main_about.png 主页关于按键
btn_back.png 返回按键
divider_maket_white.png 商城白色分割线
ic_edit.png 编辑图标
bg_main.png 主页背景
btn_red.png 红色按键
btn_red_big.png 红色大按键
Ic_head_small.png 小头像图标
bg_input.png 输入框背景
divider_white.png 白色分割线
bg_main_head.png 主页头部背景
def_search_cell.png 搜索页面默认单元图片
ic_more_help.png 更多帮助图标
divider_list_line.png 列表分割线
sel_search_ok.xml 搜索界面确认选择器
shape_music_ring.xml 音乐界面环形形

选择器:sel_btn_xx.xml,采用如下命名:

名称 说明
sel_btn_xx 作用在 btn_xx 上的 selector
btn_xx_normal 默认状态效果
btn_xx_pressed state_pressed 点击效果
btn_xx_focused state_focused 聚焦效果
btn_xx_disabled state_enabled 不可用效果
btn_xx_checked state_checked 选中效果
btn_xx_selected state_selected 选中效果
btn_xx_hovered state_hovered 悬停效果
btn_xx_checkable state_checkable 可选效果
btn_xx_activated state_activated 激活效果
btn_xx_window_focused state_window_focused 窗口聚焦效果

布局资源

  • 命名规则:类型 + 模块名 +逻辑名
    例如:
名称 说明
activity_main.xml 主窗体
activity_main_head.xml 主窗体头部
fragment_music.xml 音乐片段
fragment_music_player.xml 音乐片段的播放器
dialog_loading.xml 加载对话框
ppw_info.xml 信息弹窗(PopupWindow)
layout_main_song.xml 主页歌曲列表项

另外 Google 官方的 demo 中命名:

  • UserProfileFragment / user_profile_layout
    官方的明明思路是:类型后缀, 前缀使用 业务模块名+实现功能名,布局的使用和页面相同的名字。这个仁者见仁,智者见智,DataBinding 声明测 Binding 累名字就是 activity 在前的。

id 命名

  • 命名规则:控件类型 + 模块名 + 逻辑名
    例如: btn_main_search、btn_back

菜单资源

  • 命名规则:模块名 + 逻辑名
    例如:main_drawer.xml、navigation.xml

values 资源

values/ 资源文件下的文件都以 s 结尾,如 attrs.xml、colors.xml、dimens.xml,起作用的不是文件名称,而是 标签下的各种标签,比如

你可能感兴趣的:(android 开发规范 (5) - android 资源)