现在的位置: 首页 > 综合 > 正文

android联系人项目结构

2013年09月17日 ⁄ 综合 ⁄ 共 2993字 ⁄ 字号 评论关闭

Android 中的Call模块(我们能看到的Call UI),隶属于App层,所以就从sources/packages/apps/Contacts(注意:Call模块并不是定义在apps/Phone 下面)这里开始。我使用的是代号为froyo的Android 2.2的代码。

Contacts模块下主要有以下几个文件和目录,附件上简要的说明:

+res

|-  anim    (定义的一些动画效果)

   |- dummy_animation.xml

   |- quickcontact.xml

   |- quickcontact_above_enter.xml

   |- etc

|-  color-finger    (文本的颜色管理)

   |- dialer_button_text.xml    (拨号盘的颜色管理,默认是白色,按下后是黑色)

   |- kind_title.xml

   |- tab_indicator_text.xml

|-  drawable(-finger | -hdpi | -hdpi-finger | -mdpi | -mdpi-finger)

   |- *.xml    (用于管理同一元素不同状态下的图片显示,由<selector>元素描述)

   |- *.png    (图片资源)

|-  layout(-finger | -land-finger | -long-finger | -long-land-finger)

   |- *.xml    (布局文件)

|-  menu    (菜单资源)

   |- edit.xml

   |- list.xml

   |- view.xml

|-  values(*)

   |- attrs.xml    (自定义的一些属性值)

   |- colors.xml    (处理通话过程中的颜色显示)

   |- dimens.xml    (定义的一些OTA二维属性,比如高度)

   |- donottranslate_config.xml    (一些配置)

   |- ids.xml    (InCall状态下菜单的id定义等)

   |- strings.xml    (字符串管理)

   |- styles.xml    (外观与样式管理)

|-  xml

   |- searchable.xml

+src

|-  com

   |-  android

      |-  contacts

         |-  model  (MVC模式中的model)

         |-  ui    (MVC模式中的view)

            |-  widget

            |- *.java

         |-  util    (MVC模式中的controller)

         |- *.java

+tests    (用于单元测试)

|-  res

   |- drawable

   |- xml

|-  src

   |-  com

      |-  android

         |-  contacts

            |-  unit

|- *.java

|- Android.mk

|- AndroidManifest.xml    (单元测试项目声明文件)

Android.mk

AndroidManifest.xml    (项目声明文件)

CleanSpec.mk

MODULE_LICENSE_APACHE2

NOTICE

——————————————————————————–

下面结合上述框架内的细节做一些简单说明。

1. Alternative Resources 可替换资源

注意到Contacts模块下的res文件夹中有很多诸如 drawable-finger,drawable-mdpi-finger,layout-land-finger,layout-long- land-finger的文件夹。这是Android为了适应不同参数的设备而采取的资源管理策略。例如,对于不同分辨率的手机应该使用不同大小的图片资 源,这些都各自定义在自己的drawable文件夹下;还有,横屏和竖屏状态下应用程序的布局应该有所不同;对于不同国家的设备,应该有相应的语言显示 等。我们用如下的方式定义这种格式:

<resources_name>-<config_qualifier>

config_qualifier可以有多个属性,每个属性中间用 – 分开。

下面简单列举几个常见的config_qualifier:

-finger    用于触摸屏的设备

-hdpi    近似于240dpi的高级显示密度的屏幕

-mdpi    近似于160dpi的中级显示密度的屏幕

-ldpi    近似于120dpi的低级显示密度的屏幕

-land    横屏显示

-port    竖屏显示

-long    比较长的屏幕,例如WQVGA(432×240), WVGA(800×480), FWVGA(854×480)

2. Dimension Units 尺寸单位

关于尺寸大小,主要有几个单位需要区分开来:px,dp,sp,pt,px,mm,in

px    pixel,像素,这个不用过多说明。

dp    Density-independent Pixels,中文叫密度无关的像素,在Android中可以用dip或dp表示,例如 android:layout_width="88dp"。在讲dip之前,我们应该先了解dpi的概念。DPI,Dots per Inch,即每英寸包含的点,一英寸约等于2.54cm,所以dpi的概念很容易在脑海中形成了。DPI是用来描述图像打印密度的单位,DPI越高,说明 打印出来的图像越细腻清晰。在72dpi的计算机中dpi就是每英寸包含的像素数。dip是针对160dpi屏幕所定义的像素单位,即在160dpi的屏
幕上,1px = 1dip. 例如,对于同样比例的4英寸屏幕,一个是160dpi,一个是320dpi,那么20px在第一个屏幕中的宽度将是第二个中的两倍,这样就造成了比例失 调,但如果是20dp,那么在第一块屏幕中将占20px,在第二块中占40px,所占屏幕宽度的比例是一样的。因此,dp消除了不同类型屏幕对布局的影 响。

sp    Scale-independent Pixels,比例无关的像素。其实这个在绝大多数情况下和dp是等价的,除非其用于字体文件参数时。

pt    point,点,表示屏幕物理尺寸的1/72大小。

mm和in分别表示毫米和英寸,均表示屏幕的物理大小。

3. Nine-Patch 图片格式

这是一种可以自定义伸缩的图像,Android会自动调整图像的大小来容 纳显示的内容。我们将某一视图的背景图像的属性定义成"wrap_content"的时候,该背景图片要根据视图的内容自动伸缩,这就是9 patch图片的典型应用。拿前面说到的btn_dial_pressed.9.png图像(9-patch图像均以.9.png作为扩展名)来说明。这 个图像其中一个位于Contacts/res/drawable-mdpi-finger下,它的实际大小如下图所示:

当它用于按下键盘时,它就会被扩展成如下样式:

  (不包含黑色边框)

很明显,宽度方向被扩展了。我们还可以使用SDK自带的工具draw9patch.bat来制作自己的9-patch图像,该工具位于SDK的tools目录下。

关于9-patch的详细说明,请查看另外一篇关于draw9patch的博客

抱歉!评论已关闭.