赞
踩
第1章 Android系统概述 1
1.1 基础知识 1
1.1.1 Android开发系统的由来 1
1.1.2 移动电话系统开发模式 2
1.1.3 未来移动电话的功能及Android的优势 4
1.2 Android的开发工作 6
1.2.1 Android移植开发 6
1.2.2 Android应用开发 8
1.2.3 Android系统开发 9
1.3 Android的SDK与源代码 10
1.3.1 基于SDK的Android开发 10
1.3.2 基于源代码SDK Android开发 11
第2章 Android系统开发综述 13
2.1 Android的系统架构 13
2.1.1 软件结构 13
android程序库:
系统C库:一个从BSD继承来的标准C系统函数库(libc),它是专门为嵌入式Linux的设备制定的库
多媒体库:基于PacketVideo的OpenCore:该哭支持多种常用的音频视频格式回访和录制,支持多种媒体格式的编码解码格式。
SurfaceManager:显示子系统的管理器,并且为多个应用程序提供2D和3D图层的无缝融合。
LibWebCore:一个最新的Web浏览器引擎,支持Android浏览器以及一个可嵌入的Web视图。
SGL:Skia图形库,底层的2D图形引擎。
3Dlibraries:基于OpenGL ES1.0 API的实现:该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。
FreeType:位图(bitmap)和矢量(vector)字体显示。
3. Android 运行环境
android 有Dalvik java虚拟机和基础Java类库组成
Dalvik是Android中使用的Java虚拟机,每一个Android程序都运行在自己的进程中,都有一个Dalvik虚拟机实例。Dalvik被设计成一个可以同时运行多个虚拟机实例的虚拟系统
Davik运行针对小内存做了优化的Dex可执行文件
同时虚拟机是基于寄存器的,所有的类都经过Java编译,然后通过SDK中的dx工具转化成.dex格式虚拟机执行
Dalvik虚拟机依赖于Linux内核一些功能,比如线程机制和底层内存管理机制。
4、 Android应用程序框架
应用程序重用机制也使用户可以方便替换程序组件,包括
views:丰富而又可扩展的视图(Views):可以用来构建应用程序,包括列表(lists)、网格(grids)、文本框(text boxes),按钮(buttons)等基本的UI元素,甚至可嵌入的Web浏览器。
content providers :使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。
resource Manager:提供非代码资源的访问,如本地字符串,图形和布局文件(layout files).
Notification Manager : 使得应用程序可以在状态栏中显示自定义的提示信息。
Activity Manager:用来管理应用程序声明周期并提供常用的导航回退功能。
WindowManager是Android中一个重要的服务(Service )。WindowManager Service 是全局的,是唯一的。它将用户的操作,翻译成 为指令,发送给呈现在界面上的各个Window。Activity会将顶级的控件注册到 Window Manager 中,
当用户点击触碰屏幕或键盘的时候,Window Manager就会通知到,而当控件有一些请求产生,也会经由ViewParent送回到Window Manager中。从而完成整个通信流程。
整个Android的窗口机制是基于一个叫做 WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端 是屏幕,另一端就是View,通过WindowManager的 addView方法创建View,这样产生出来的View根据
WindowManager.LayoutParams属性不同,效果也就不同了。比如创建 系统顶级窗口,实现悬浮窗口效果!WindowManager的方法很 简单,基本用到的就三addView,removeView,updateViewLayout。接口,而WindowManager.LayoutParams的属性就多了,非常丰富, 具体请查后面介绍
怎么样获取windowManager实例呢,下面我们就通过一个小的例子来说明以下:
Button bb=new Button(getApplicationContext());
WindowManager wmManager=(WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();
/**
*以下都是WindowManager.LayoutParams的相关属性
* 具体用途请参考SDK文档
*/
wmParams.type=2002; //这里是关键,你也可以试试2003
wmParams.format=1;
/**
*这里的flags也很关键
*代码实际是wmParams.flags |= FLAG_NOT_FOCUSABLE;
*40的由来是wmParams的默认属性(32)+ FLAG_NOT_FOCUSABLE(8)
*/
wmParams.flags=40;
wmParams.width=40;
wmParams.height=40;
wmManager.addView(bb, wmParams); //创建View
上面就是一个简单的例子,创建了一个Button对象然后通过WindowManager实例对象的addView添加这个ButtonVIew并根据相应的LayoutParams参数进行显示。
WindowManager对象的一些接口说明:
1)abstract Display getDefaultDisplay(); //获取默认显示的 Display 对象。
2)abstract void removeViewImmediate(View view);//是removeView(View) 的一个特殊扩展,在方法返回前能够立即调用该视图层次的View.onDetachedFromWindow() 方法。
下面我们就重点介绍以下WindowManager接口的嵌套内部类LayoutParams。
WindowManager.LayoutParams 是 WindowManager 接口的嵌套类;继承于 ViewGroup.LayoutParams 。它的内容十分丰富。其实WindowManager.java的主要内容就是由这个类定义构成。下面来分析一下这个类:
定义
public static class WindowManager.LayoutParams
extends ViewGroup.LayoutParams implements Parcelable
继承关系
java.lang.Object
↳android.view.ViewGroup.LayoutParams
↳android.view.WindowManager.LayoutParams
继承来的属性与常量
从 ViewManager.LayoutParams 继承来的属性:
android:layout_height
Specifies the basic height of the view.
android:layout_width
Specifies the basic width of the view.
从 ViewManager.LayoutParams继承的常量:
FILL_PARENT
WRAP_CONTENT
MATCH_PARENT
两个变量:
width
height
属性及可用的常量定义
1. public int x;
如果忽略gravity属性,那么它表示窗口的绝对X位置。
什么是gravity属性呢?简单地说,就是窗口如何停靠。
当设置了 Gravity.LEFT 或 Gravity.RIGHT 之后,x值就表示到特定边的距离。
2. public int y;
如果忽略gravity属性,那么它表示窗口的绝对Y位置。
当设置了 Gravity.TOP 或 Gravity.BOTTOM 之后,y值就表示到特定边的距离。
3. public float horizontalWeight;
public float verticalWeight;
在纵/横向上,为关联的view预留了多少扩展空间(像素)。如果是0,那么此view不能被拉伸。
其他情况下,扩展空间(像素)将被widget所均分。
4. public int type;
窗口类型。有3种主要类型:
a)Applicationwindows:
取值在 FIRST_APPLICATION_WINDOW 和 LAST_APPLICATION_WINDOW 之间。
是通常的、顶层的应用程序窗口。必须将 token 设置成 activity 的 token 。
b)Sub_windows:
取值在 FIRST_SUB_WINDOW 和 LAST_SUB_WINDOW 之间。
与顶层窗口相关联,token 必须设置为它所附着的宿主窗口的 token。
c)Systemwindows:
取值在 FIRST_SYSTEM_WINDOW 和 LAST_SYSTEM_WINDOW 之间。
用于特定的系统功能。它不能用于应用程序,使用时需要特殊权限。
下面定义了 type 的取值:
应用程序窗口。
public static final int FIRST_APPLICATION_WINDOW = 1;
所有程序窗口的“基地”窗口,其他应用程序窗口都显示在它上面。
public static final int TYPE_BASE_APPLICATION =1;
普通应哟功能程序窗口。token必须设置为Activity的token,以指出该窗口属谁。
public static final int TYPE_APPLICATION = 2;
用于应用程序启动时所显示的窗口。应用本身不要使用这种类型。
它用于让系统显示些信息,直到应用程序可以开启自己的窗口。
public static final int TYPE_APPLICATION_STARTING = 3;
应用程序窗口结束。
public static final int LAST_APPLICATION_WINDOW = 99;
子窗口。子窗口的Z序和坐标空间都依赖于他们的宿主窗口。
public static final int FIRST_SUB_WINDOW = 1000;
面板窗口,显示于宿主窗口上层。
public static final int TYPE_APPLICATION_PANEL = FIRST_SUB_WINDOW;
媒体窗口,例如视频。显示于宿主窗口下层。
public static final int TYPE_APPLICATION_MEDIA = FIRST_SUB_WINDOW+1;
应用程序窗口的子面板。显示于所有面板窗口的上层。(GUI的一般规律,越“子”越靠上)
public static final int TYPE_APPLICATION_SUB_PANEL = FIRST_SUB_WINDOW +2;
对话框。类似于面板窗口,绘制类似于顶层窗口,而不是宿主的子窗口。
public static final int TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW +3;
媒体信息。显示在媒体层和程序窗口之间,需要实现透明(半透明)效果。(例如显示字幕)
public static final int TYPE_APPLICATION_MEDIA_OVERLAY = FIRST_SUB_WINDOW +4;
子窗口结束。( End of types of sub-windows )
public static final int LAST_SUB_WINDOW = 1999;
系统窗口。非应用程序创建。
public static final int FIRST_SYSTEM_WINDOW = 2000;
状态栏。只能有一个状态栏;它位于屏幕顶端,其他窗口都位于它下方。
public static final int TYPE_STATUS_BAR = FIRST_SYSTEM_WINDOW;
搜索栏。只能有一个搜索栏;它位于屏幕上方。
public static final int TYPE_SEARCH_BAR = FIRST_SYSTEM_WINDOW+1;
电话窗口。它用于电话交互(特别是呼入)。它置于所有应用程序之上,状态栏之下。
public static final int TYPE_PHONE = FIRST_SYSTEM_WINDOW+2;
系统提示。它总是出现在应用程序窗口之上。
public static final int TYPE_SYSTEM_ALERT = FIRST_SYSTEM_WINDOW +3;
锁屏窗口。
public static final int TYPE_KEYGUARD = FIRST_SYSTEM_WINDOW +4;
信息窗口。用于显示toast。
public static final int TYPE_TOAST = FIRST_SYSTEM_WINDOW +5;
系统顶层窗口。显示在其他一切内容之上。此窗口不能获得输入焦点,否则影响锁屏。
public static final int TYPE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW +6;
电话优先,当锁屏时显示。此窗口不能获得输入焦点,否则影响锁屏。
public static final int TYPE_PRIORITY_PHONE = FIRST_SYSTEM_WINDOW +7;
系统对话框。(例如音量调节框)。
public static final int TYPE_SYSTEM_DIALOG = FIRST_SYSTEM_WINDOW +8;
锁屏时显示的对话框。
public static final int TYPE_KEYGUARD_DIALOG = FIRST_SYSTEM_WINDOW +9;
系统内部错误提示,显示于所有内容之上。
public static final int TYPE_SYSTEM_ERROR = FIRST_SYSTEM_WINDOW +10;
内部输入法窗口,显示于普通UI之上。应用程序可重新布局以免被此窗口覆盖。
public static final int TYPE_INPUT_METHOD = FIRST_SYSTEM_WINDOW +11;
内部输入法对话框&
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。