用户界面
  在一个Android应用程序里,用户接口是一系列的View和ViewGroup对象组合而成。Android有很多种View和ViewGroup对象,他们都继承自View基类。
  View对象是Android平台用户接口的基本对象。这些view类作为与用户交互的widgets小部件的父类,像文本框和按钮。ViewGroup作为提供各种布局结构的layouts的父类,例如linear线性布局,表格布局和绝对布局。
  一个view对象是一个数据结构,他存储布局参数和屏幕特定区矩形区域的内容。一个view会处理自己所在屏幕区域的测量、布局、绘制、焦点改变、滚动、和按键手势交互。作为用户交互对象,一个view可以作为用户与系统的交互工具,接收事件。

  View 结构体系
  在Android平台,你要用到View或ViewGroup的层、节点的方式来定义一个Android用户界面,就像下面的图表,这个层次结构树可以按你的需求变得简单或者复杂。你可以用Android系统已经定义好的小控件或者布局,或者自定义一些。


  为了能让你的view层次结构在屏幕上渲染,你的activity需要调用setContentView()方法并且传递一个根节点对象的引用。Android系统接收这些配置,并使用他们来进行测量绘制这个树形的视图结构。这个视图结构的根节点要求他的孩子节点自我绘制,反过来说,每个viewGroup节点负责让他们的子节点自我绘制。子节点会在父节点哪里请求到尺寸和位置,但父对象会最终决定他们孩子有多大。Android按顺序解析你的布局上的所有元素,从顶端开始,实例化view并且把他们添加到父对象。因为他们都是按顺序被绘制的,如果某些view超出的显示范围,那么后来绘制的将会覆盖原来的。

  关于view结构体系怎样绘制,在后面会有详细的讨论。

  布局
  通常最多的布局是通过xml来定义。xml提供一个容易阅读的结构,很像html。xml中每个元素都是一个view或者viewGroup对象(或他们的子类)。view在树结构中是叶子节点,ViewGroup对象在非叶子节点。
  xml元素名代表着各个类。比如<TextView>元素会创建一个TextView控件,一个<LinearLayout>会创建一个LinearLayout的viewGroup,当你加载一个布局资源,Android系统会初始化运行时对象,即对应的布局元素。

  例如,一个简单的垂直布局,里面包含一个textView和一个Button。

java代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
注意,linearLayout元素包含着TextView和Button。你可以嵌套另外的LinearLayout,来增加view的长度,或者增加一个更复杂的布局。

  你可以在你的布局里用很多种布局方式,使用很多不同类型的viewGroup,你可以定义无限多的子view或者子viewGroup。android提供一些预先定义好的布局,包括:LinearLayout-线性布局, RelativeLayout-关系布局, TableLayout-表格布局, GridLayout 网格布局等。他们提供一些独特的参数用来定义view的位置和布局结构。
  Widgets小部件

  widget是一个服务于用户与界面交互的view对象。Android提供很多视图小部件,如按钮、寻则狂、文本输入框、到呢个,你可以很快的构建自己的布局。一些小部件很复杂,像日期选择器,一个时钟,缩放控制。但你不会被Android平台所提供的UI部件所限制,你可以自定义UI部件,可以继承或者结合已经存在的UI部件。

  UI事件

  一旦你向界面添加了view或者widget,你可能会想他们怎样与用户进行交互的,这样你就可以执行一些操作。添加UI事件,你需要做两件事情:
  @ 定义事件******并注册给view。
  多半情况下,这就是你怎样监听事件:view 类包含了一些名如OnXXXListener的******,他们都有名为OnXXX()的回调方法。例如:View。onClickListener(这是处理点击事件的),View。onTouchListener(处理触摸事件),View.onKeyListener(处理按键事件),所以如果你想让view响应点击事件,比如按钮被选中,你需要实现OnClickListener接口并且定义回调方法,并且用setOnClickListener()方法来注册View。
  @ 覆盖一个已经存在的回调方法:
  如果你失信了自己的View类并且想要监听一些特殊的事件,那你应该用这种方法。例如,你可以处理屏幕触摸事件,处理滚动球事件,按键等事件。它允许你定义默认的事件,即自定义的view的每个事件,确定这个时间是否会传递到一些字view。然后,他们调用view类的回调函数,所以当你自定义一个组件时才有机会用到这种方法。

  菜单Menu

  应用程序菜单是UI的另一个很重要的部分。Menu提供一些可靠的借口来展示程序的功能和一些设置。通常menu是通过按menu键才显示的。然而,你可以让用户按下或者按住某一项时显示menu菜单。

  menu菜单也遵循view的层次结构,但不要自己定义。取而代之的是,你只需为你的activity定义onCreateOptionsMenu()和onCreateContextMenu()两个回调方法即可,在适当的时间,Android会自动的绘制必要的视图结构并且menu的所包含的子项的。

  Menu会处理他自己的时间。所以不需要注册事件******,当menu中的某一项被选中,系统会调用onOptionsItemSelected()方法或者onContextItemSelected()方法。

  和应用程序的布局很像,你可以用xml来配置你的menu项。
  高级特征
  一旦你了解了创建用户界面的基本原则。你可以浏览一些高级特征来创建更复杂的应用程序接口。

  适配器Adapters
  一些时候,你不想用“硬代码”来填充一些view的数据,相反,你想让view绑定额外的数据集。要这样的话,你要定义一个AdapterView,每个子View里的数据都会被适配器填充。

  适配器视图对象 AdapterView是实现的ViewGroup接口,子类是由被给出的适配器对象决定的。适配器就像你的adapter视图和数据源之间的适配器。这里有几种适配器类的实现方式,对于特殊的任务,例如自定义的适配器从一个Cursor来读取数据库的数据,或者一耳光数组适配器从任意一个数组读取数据。

  风格和主题 Styles、Themes
  你或许不满意标准控件的外观,你可以定制他们的风格和主题来改变他们。

  @ 一个style是一个格式化的属性集,你作为布局的其中一个单元来使用他们。例如,你可以定义某些文本的文字大小和颜色作为特殊的view元素。
  @ 一个theme主题是应用程序中整个activity的个格式化的属性集。例如,你可以定义窗体的边框和面板的背景,并且设置menu的字体大小和颜色。它可以应用在整个程序里。

Android 深入解析用户界面(一): http://www.eyeandroid.com/thread-251-1-1.html
Android 深入解析用户界面(二): http://www.eyeandroid.com/thread-252-1-1.html
Android 深入解析用户界面(三): http://www.eyeandroid.com/thread-253-1-1.html
Android 深入解析用户界面(四): http://www.eyeandroid.com/thread-254-1-1.html

更多相关文章

  1. android修改软键盘的回车键为搜索键以及点击时执行两次监听事件
  2. Android.GridView事件监听
  3. Android之——自己定义TextView
  4. Android之——史上最简单自定义开关按钮的实现
  5. 在Android(安卓)开发中使用Protobuf的实践和经验分享
  6. Android中EventBus事件总线发送网络请求结果更新UI
  7. Android(安卓)Binder
  8. design principle:模拟 android Button 控件点击事件
  9. android 事件总线 -- Otto(一)

随机推荐

  1. linux常用命令--开发调试篇
  2. 玩转 Linux,掌握这些 Linux 命令就够了!
  3. 对 Linux 新手非常有用的 20 个命令
  4. 看看函数库
  5. 普通人打工,用创业心态干好8小时工作
  6. PHP基础:COOKIE/SESSION和命名空间
  7. 大牛干货,MySQL命令1000行整理,收藏学习
  8. 必须掌握的30种SQL语句优化
  9. 用心整理,1000行MySQL命令,很实用,建议收藏
  10. json数据类型,安装MySQL