Android开发指南-框架主题-用户界面

用户界面User Interfaceandroid

关键类
View
ViewGroup
Widget classes
在一个Android应用中,用户界面是由View 和ViewGroup对象构建的。View与ViewGroup都有不少种类,而它们都是View类的子类。数据库


View对象是Android平台中用户界面体现的基础单位。View类是它称为“widgets(工具)”的子类的基础,它们提供了诸如文本输入框和按钮之类的UI对象的完整实现。ViewGroup类一样为其被称为“Layouts(布局)”的子类奠基了基础,它们提供了象流式布局、表格布局以及相对布局之类的布局架构。数组


View对象是一个数据体,它的属性存储了用于屏幕上一块矩形区域的布局参数及内容。并负责这块它所辖的这个矩形区域之中全部测量、布局、焦点转换、卷动以及按键/触摸手势的处理。做为一个用户界面对象,View同时也担任着用户交互关键点以及交互事件接受者的角色。架构


视图层次View Hierarchy
在Android平台上,你能够用下图所示的View和ViewGroup层次图来定义一个Activity的UI。这个层次树可随你所愿的简单或者复杂化,你能使用Android预约义的一套工具和布局来建立它,或者使用你本身定义的Views来建立。框架


为了把一个视图层次树展示到屏幕上,你的Activity必须调用setContentView()方法 ,并传给它一个根节点对象的引用。Android系统将接受此引用,并用来进行界面的废止、测量并绘制这棵树。层次的根结点会要求它的子节点进行自我绘制──进而,每一个视图组节点也负责调用它的子视图进行自我绘制。子节点将向父节点申请绘制的位置以及大小,而其父类享有子节点绘制的位置及大小的最终决定权。Android依次(自层次树顶层开始)解析你布局中的元素,实例化View并将它们添加到它们的父节点中。由于这个过程是依次进行的,因此若是出现了元素重叠的状况,最后一个绘制的元素将位于全部重叠元素之上显现。工具


如欲得到更多关于视图层次如何测算以及绘制细节的讨论,情参阅Android如何绘制视图。
布局Layout
定义并展示你的视图层次的最经常使用的方法是使用XML布局文件。如同HTML同样,XML为布局提供了一种可读的结构。XML中的每一个元素都是View或ViewGroup对象(抑或它们的子类)。View对象是树的叶节点,而ViewGroup对象是树的分支(参阅楼上的视图层次图)。布局

XML元素的名称与它体现的Java类相对应。因此一个 元素将在你的UI中生成一个TextView,而 则建立一个LinearLayout视图组。当你载入一个布局资源时,Android系统会根据你布局中的元素初始化这些运行时对象。 字体

举例来讲,一个包含文本视图和一个按钮的简单垂直布局以下:编码

http://schemas.android.com/apk/res/android"              android:layout_width="fill_parent"               android:layout_height="fill_parent"              android:orientation="vertical" >        请注意:LinearLayout 元素包含了TextView 和Button 对象。你能够在其中另外安置一个LinearLayout (或其它类型的视图组),以延展这个视图层次,构建更复杂的布局。.net

欲获知更多如何构建UI布局的内容,请参阅声明布局。

提示:您也能够用Java代码来绘制View和ViewGroup对象,并用 addView(View)方法动态的插入新的View和ViewGroup对象。

您有至关多的方法来对视图进行布局。使用大量不一样种类的视图组,您能够有近乎无穷的方式来构建子视图和视图组。Android提供了一些预约义的视图组,其中包括LinearLayout, RelativeLayout, AbsoluteLayout, TableLayout, GridLayout以及其它的一些。每一个都为定义子视图和布局结构提供了一套独特的布局参数。

欲了解其它用于布局的不一样种类的视图组,请参阅普通布局对象。

部件Widgets
部件是为用户交互界面提供服务的视图对象。Android提供了一套完整的部件实现,包括按钮、复选框、文本输入框等,以助于你快速的构建UI。Android还提供了一些更高级的部件,好比日期选择、时钟以及缩放控制。但您并无被局限于Android平台提供的这些部件上。若是您想建立一些您本身的定制动做元素,您能够这么作,只要定义本身的视图对象或者扩展或合并现有的部件就行。

更多信息参阅构建自定义组件。

您能够在android.widget包中找到Android提供的部件列表。

用户界面事件UI Events
当你在用户界面中加入了一些视图和工具以后,你可能想要知道如何让它们与用户交互,进而实现你的动做。如欲得到用户界面事件通知,你须要作如下两件事情之一:

定义一个事件侦听器并将其注册至视图。一般状况下,这是你侦听事件的主要方式。View类包含了一大堆命名相似 On <什么什么> Listener的接口,每一个都带有一个叫作On <什么什么> ()的回调方法。好比: View.OnClickListener  (用以处理视图中的点击),View.OnTouchListener (用以处理视图中的触屏事件),以及View.OnKeyListener  (用以处理视图中的设备按键事件)。因此,若是你但愿你的视图在它被”点击”(好比选择了一个按钮)的时候得到通知,你就要实现OnClickListener,定义它的onClick()回调方法(在其中进行相应处理),并将它用setOnClickListener()方法注册到视图上。
为视图覆写一个现有的回调方法。这种方法主要用于你本身实现了一个View类,并想侦听其上发生的特定事件。好比说当屏幕被触摸(onTouchEvent()),当轨迹球发生了移动(onTrackballEvent())或者是设备上的按键被按下(onKeyDown())。这种方式容许你为本身定制的视图中发生的每一个事件定义默认的行为,并决定是否须要将事件传递给其它的子视图。再说一次,这些是View类相关的回调方法,因此你只能在你构建自定义组件时定义它们。
如何在视图中处理用户交互请参见处理用户界面事件文档。


菜单Menus
应用程序菜单是应用程序用户界面中另一个重要的组成部分。菜单为展示应用程序功能和设置提供了一个可靠的界面。按下设备上的MENU键会调出最普通的应用程序菜单。然而,你也能够加入当用户长按一个项目时调出的上下文菜单。

菜单也是用视图层次进行构架的,但你没必要本身定义这个架构。你只要为你的Activity定义onCreateOptionsMenu() 和 onCreateContextMenu() 回调方法,并声明你想要包含在菜单中的项目就好了。Android将为你的菜单自动建立视图层次,并在其中绘入你的菜单项。

菜单会自行处理它们的事件,因此你没必要为你菜单中的项目注册事件侦听器。当你菜单中的一项被选定时,框架将自动调用 onOptionsItemSelected() 或 onContextItemSelected() 方法。

如同应用程序布局同样。你也能够在一个XML文件中定义你菜单中的项目。

更多信息,请参阅建立菜单。

高级话题Advanced Topics
一旦你对建立用户界面的基础了如指掌,你就能够尝试着用一些高级功能来建立更加复杂的应用程序界面。

适配器Adapter
有时候你会想要用一些没法硬编码的信息来填充视图组。你想将源于外部的数据绑定到你的视图中。为达到这个目的,你可使用AdapterView做为你的视图组,并用Adapter传来的数据初始化每一个子视图并填入其中。

AdapterView对象是一个用给定的Adapter对象为基础构建它的子视图的ViewGroup实现。而Adapter在你的数据源(多是一个外部字符串数组)和显示这些数据的AdapterView之间扮演着一个信使的角色。针对特定的任务有着不少不一样的Adapter类实现,好比CursorAdapter依据Cursor读出一个数据库的数据,而一个ArrayAdapter则从任一个数组进行读取。

想要了解如何运用Adapter填充你的视图,请参见用AdapterView绑定至数据。

风格与主题Styles and Themes
或许你对标准工具的外表不是那么满意。为了解决这个问题,你能够建立你本身的风格和主题。

风格是一套包含一个或多个格式化属性的总体,你能够把它们加诸于你布局中的单个元素之上。好比,你能够定义一个包含特定文本字体大小和颜色的风格,并将它单独施用于特定的视图元素。
主题也是一套包含一个或多个格式化属性的总体,但却应用于一个应用程序中的全部Activity,或单独一个Activity。好比说,你能够定义一个包含了特定窗口边框颜色和版面背景、以及一套字体大小和菜单颜色的主题。这个主题能够施用于特定的Activity抑或整个应用程序。
风格与主题隶属于资源。Android提供了一些默认的风格和主题供你使用,你也能够定制你本身的风格和主题资源。


想了解更多关于使用风格和主题的内容,请参阅使用风格和主题文档。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/iefreer/archive/2009/08/17/4457113.aspx

相关文章
相关标签/搜索