UI构造和资源使用
(1)界面构造
Activity只是一个UI的容器,对于Android来说,Android的UI框架最核心的,是资源和Layout体系,Android提供了大量的的UI控件,是的我们可以构建自己的用户界面!
UI控件
做UI,有时候就像搭积木,在Android中,这个最原子的积木块,就是View。所有其他的UI元素,都是派生于此类的子孙类们。
SDK中图,用来描述Android的UI控件结构
在每一个window(Activity下的一个抽象类)下,这都是一个标准而完整的View树结构。View有一个子类ViewGroup,它相当于一个容器类或者是复合控件,所有派生与ViewGroup的子类在这颗UI树中都可以承担着父节点的职责,而另一些绕过ViewGroup从View直通下来的,就只能蜷局在叶节点的范畴内了。
每个控件如何标识,如何设定大小和位置,其如何接受和处理事件,如何在程序中得到控件?
标识
在Android中,我们可以为每个控件选择设定一个id,这个id的全局的唯一性不需要保证,但在某个局部的范围内(就是在一个Layout内唯一就可以了)具有可识别性,这样就可以通过这个id找到这个控件。
尺寸,大小和位置
在Android中,控件最重要的大小属性,就是width/height,开发者可以明确的指明控件的大小,可以设定成为fill_parent和wrap_content,
事件
Android的事件处理逻辑,采用的是观察者模式。Android的控件提供了一些列的add/set Listener的接口,使得外部观察者,有机会处理控件事件。比如,你需要在某个button被点击时做一些事情,你就需要派生一个View.OnClickListener对象作为观察者,调用该控件的setOnClickListener接口注册进去,当button被点击,就可以获得处理点击事件的机会了。
上面是java机制的事件基本的原理。但是在android的framework中,已经可以简化了这个过程如下:
哈哈,是不是很简单,所以我们这才是在Framework下开发呢!
Layout
Layout是一类特殊的ViewGroup控件,它们本身没有任何可显示内容,形如透明的玻璃盒子,存活的唯一理由,就是其中的内部结构,能够更好的摆放它的子控件们。比如线性的Layout,LinearLayout。放入这个Layout的子控件,会按水平或垂直方向,排排坐,一个挨着一个按顺序排列下去。TableLayout,可以将子控件按照表格的形式,一枚枚放置好。而RelativeLayout则更灵活,可以设定各个控件之间的对齐和排列关系,适合定制复杂的界面。有了Layout的存在,控件和控件之间不再割裂的存在,而是更有机的结合在了一起,设定起来也更为方便。
基本的Layout如下:
线性布局(LinearLayout):线性布局,按照垂直或者水平方向布局组件。 重点
帧布局(FrameLayout):组件从屏幕的左上角坐标布局组件。
表格布局(TableLayout):按照行列方式布局组件。 重点
相对布局(RelativeLayout):相对其它组件的布局方式。重点
绝对布局(AbsoluteLayout):按照绝对坐标来布局。————这个可以就当做没有!
(2)资源文件
主要是R.java的这个资源的索引文件使用按 和res文件下的各类具体的资源描述概述。
结构和格式
Android的资源文件,是由目录结构,Xml格式的文件,和纯数据文件构成。XML没学习过,都没有关系,老师给我们上了两天的XML的课程,把Android中用到的XML的技术和知识都介绍了!!!
Android的资源文件,覆盖面超级广,只要是和界面相关的,都可以用资源文件表示,比如:UI的样式,菜单,配置文件,各种描述性字符串,图片,音频视频文件,动画,颜色,尺寸,风格和样式,等等等。
所有的资源文件都放在res目录下,不同类别的资源,需要放置在不同的特定名称的子文件夹中,或者是写在特定文件名的文件中
UI背景之类的图片,都需要扔在drawable这类的文件夹中
所有字符串相关的,都会放到values目录下形如strings.xml这样的文件中
(如下图所示,是一个资源文件目录结构的截图...)。
可配置性
(A)国际化:
values是默认的字符串文件夹。
如果你想国家化,使你的程序支持中文简体,那么表示简体中文字符信息的资源,可以放到values-zh-rCN中去,当系统语言环境为简体中文时,就会呈现出中文的字符信息! 有点java语言的国际化的味道!!!!
(B)界面的状态变化
有这样类似的需求,一个按钮,我们需要没有按下去的时候是一种背景,再次按下优势另外一种背景,就在在两个背景切换。这个功能可以通过配置文件完成! 哈哈。下次课程就会写这个例子!!! 先不要着急!
R类
在使用资源后,界面逻辑与底层逻辑的耦合被降低了,但这不意味着,两者没有关联了。比如,需要为某个按钮增加一个点击事件,就需要定位到所需的那个按钮;再比如,你需要使用某个字符串资源,就需要能定位到资源中放置的该字串。
在Android中,引入了一个R类。
R.java 下面是SDK的官方解释:
它的基本思想是,通过增加一个额外的编译器,为所有的资源项,都赋予一个32位的整形数来表示,同一个资源像的不同配置,都使用同一个id。这个整形数,就相当于这个资源项的门牌号码,能够帮助定位到对应的资源项。所有的这些整形数,都以常量的方式,整合到一个Java类中,这个类就是R类。这样,在程序中,就可以通过使用这个R类,来查找所需的资源,这就将字符串比较,简化成了一个整形数的比较,大大的节约了开销。
注意的事项:
(1)Android 中所有的资源文件必须是英文小写。可以可以有下划线_. 如果学过正则表达式就是如下: [ a-z0-9_ ] ,,java课上我们学习过了正则表达式!!
(1) Android重要扩展包
android.app :提供高层的程序模型、提供基本的运行环境
android.content :包含各种的对设备上的数据进行访问和发布的类
android.database :通过内容提供者浏览和操作数据库
android.graphics :底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制到屏幕上.
android.location :定位和相关服务的类
android.media :提供一些类管理多种音频、视频的媒体接口
android.net :提供帮助网络访问的类,超过通常的java.net.* 接口
android.os :提供了系统服务、消息传输、IPC 机制
android.opengl :提供OpenGL 的工具
android.provider :提供类访问Android 的内容提供者
android.telephony :提供与拨打电话相关的API 交互
android.view :提供基础的用户界面接口框架
android.util :涉及工具性的方法,例如时间日期的操作
android.webkit :默认浏览器操作接口
android.widget :包含各种UI 元素(大部分是可见的)在应用程序的屏幕中使用!
(2) 代码的有关文件总体说明!
.java 应用程序源文件
Class文件------Java编译后的目标文件.
class 不能在AndroidDalvik 的java 环境中运行,android的class 文件实际上只是编译过程中的中间目标文件,需要链接成dex 文件后才能在dalvik 上运行!
Dex文件-----Android平台上的可执行文件
Android 虚拟机Dalvik 支持的字节码文件格式Google 在新发布的Android 平台上使用了自己的Dalvik 虚拟机来定义,这种虚拟机执行的并非Java 字节码,而是另一种字节码:dex 格式的字节码。在编译Java 代码之后,通过Android 平台上的工具可以将Java 字节码转换成Dex 字节码。
Apk文件-------Android上的安装文件
Apk 是Android 安装包的扩展名,一个Android 安装包包含了与某个Android 应用程序相关的所有文件。apk文件将AndroidManifest.xml 文件、应用程序代码(.dex 文件)、资源文件和其他文件打成一个压缩包。一个工程只能打进一个.apk 文件。
浙公网安备 33010602011771号