用户界面
  在一个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中EventBus事件总线发送网络请求结果更新UI
  3. Android线性LinearLayout布局xml属性介绍
  4. Android之——史上最简单自定义开关按钮的实现
  5. Android之——自己定义TextView
  6. Unexpected namespace prefix "xmlns" found for tag LinearLayo
  7. android在布局中动态增加view时的层级控制
  8. Android.GridView事件监听

随机推荐

  1. Android通过JSON数据格式和java服务后台
  2. Android 从源码看懂窗口绘制流程
  3. Android Studio 3.4.1(3.5.2)入门教程( 2019
  4. 什么是全面屏?
  5. android基础知识02——线程安全3:Message,M
  6. android利用BitMap获得图片的像素数据
  7. Android中的Http通信(三)之get、post传递参
  8. 深入理解Activity及生命周期
  9. [Android] 获取照片(相机,相册)
  10. android中XML文件系列(一)—Drawable中的XM