Android——创建用户界面Android创建用户界面1、View,ViewGroup,Activity2、可视化控件3、布局4、菜单5、对话框6、响应用户界面事件7、用户界面的数据绑定谢谢大家!View,ViewGroup,Activity.View是可视界面元素的基本用户界面类(可称为控件或wiget),所有的用户界面控件以及布局类都由View派生来。.它主要提供控件绘制和事件处理的方法。而可视化控件是指重写了View的绘制和事件处理方法并最终与用户交互的对象。eg:EditText,Button等。.ViewGroup是对View类的扩展,用来包含多个View。.它的主要特点是可以有子控件,而这些子控件可以是View类的对象,也可以是ViewGroup类的对象。通过扩展ViewGroup类,可以创建由多个子控件组成的复杂控件。ViewGroup类也可以提供布局管理器,eg:LinearLayout,来合成用户界面。.Activity代表的是显示给用户的窗口或屏幕。.要显示一个用户界面就需要给一个Activity分配一个View或者布局。可视化控件(widgets)Android提供的控件:TextView文本显示控件,EditText可编辑文本控件Button按钮,ImageButton图像按钮CheckBox复选控件,RadioButton单选按钮控件,AnalogClock仿真时钟,DigitalClock数组时钟ImageView图像显示控件,等等......eg:example1可视化控件(widgets)可视化控件的使用:.在xml中静态的设置.在java代码中动态的设置创建定制控件及使用:创建一个自定义的控件,需要对View类或者SurfaceView类进行扩展。eg:example2,compass创建复合控件以及复合控件的使用:复合控件是指不可分割的,可重用的widget。复合控件包含了多个布局和捆绑在一起的子控件。当创建复合控件的时候必须对它的布局,外观和它所包含的View之间的交互进行定义。eg:example3布局Layout是Android中负责管理控件在屏幕上的类。Android内置的布局类包括:.线性布局(LinearLayout).表格布局(TableLayout).相对布局(RelativeLayout).单帧布局(FrameLayout).坐标布局(AbsoluteLayout)布局—线性布局(LinearLayout)线性布局(LinearLayout)是应用程序中最常用的布局方式它提供控件的水平和垂直排列模型,同时我们可以通过设置各个控件的weight参数,来调整控件在布局中的相对大小。eg:垂直排列eg:水平排列eg:水平布局与垂直布局的嵌套红色框是一个垂直排列的布局绿色框为一个水平排列的布局其中水平排列的布局嵌套在垂直布局中。android:orientation:.horizontal(水平排列).vertial(垂直排列)eg:example4布局—表格布局(TableLayout)表格布局(TableLayout)是以行列的形式管理元素。.每一行是一个TableRow布局对象,也可以是普通的View对象。.TableRow里每放一个元素就是一列。.总列数由最多列数的一行决定。TableLayout常用属性:android:collapseColumns:以第0行为序,隐藏指定的列android:shrinkColumns:以第0行为序,自动延伸指定的列填充可用部分android:stretchColumns:以第0行为序,尽量把指定的列填充空白部分布局—表格布局(TableLayout).android:collapseColumns:以第0行为序,隐藏指定的列:android:collapseColumns该属性为空时,如下图:把android:collapseColumns=0,2,意思是把第0和第2列去掉,如下图:.android:shrinkColumns:以第0行为序,自动延伸指定的列填充可用部分:当LayoutRow里面的控件还没有布满布局时,shrinkColumns不起作用,如下图:布局—表格布局(TableLayout)设置了shrinkColumns=0,1,2,布局完全没有改变,因为LayoutRow里面还剩足够的空间。当LayoutRow布满控件时,如下图:当LayoutRow布满控件时,如下图:设置设置了shrinkColumns=2,则结果如下图,控件自动向垂直方向填充空间:布局—表格布局(TableLayout).android:stretchColumns:以第0行为序尽量把指定的列填充空白部分:android:stretchColumns该属性为空时,如下图:设置stretchColumns=1,则结果如下图,第1列被尽量填充(Button02与TextView02同时向右填充,直到TextView03被压挤到最后边)。eg:example5布局—相对布局(RelativeLayout)使用相对布局(RelativeLayout),可以定义每个子View与其他子View之间以及屏幕边界之间的相对位置。RelativeLayout常用属性:android:layout_above将该控件的底部置于给定ID的控件之上;android:layout_below将该控件的底部置于给定ID的控件之下;android:layout_toLeftOf将该控件的右边缘与给定ID的控件左边缘对齐;android:layout_toRightOf将该控件的左边缘与给定ID的控件右边缘对齐;android:layout_alignBaseline将该控件的baseline与给定ID的baseline对齐;android:layout_alignTop将该控件的顶部边缘与给定ID的顶部边缘对齐;android:layout_alignBottom将该控件的底部边缘与给定ID的底部边缘对齐;android:layout_alignLeft将该控件的左边缘与给定ID的左边缘对齐;android:layout_alignRight将该控件的右边缘与给定ID的右边缘对齐;eg:example6布局—单帧布局(FrameLayout)FrameLayout是最简单的布局管理器,FrameLayout只是简单地把每一个子View放置在左上角的位置。在添加多个子View时,它会把每一个新的子View堆积在前一个子View的上面,而且每一个新的子View会遮挡住上一个。eg:eg:example7布局—坐标布局(AbsoluteLayout)在AbsoluteLayout中,每个子Vew的位置会按照绝对坐标进行定义。如果不设定坐标值,则子View会像FrameLayout那样被排在左上角。(所有的子View都要设置layout_x,和layout_y)eg:菜单(android.view.Menu).图标菜单.扩展菜单.子菜单菜单—选项菜单OptionsMenu这是一个活动的主菜单,通过按下设备菜单键来显示它。打开后,出现图标菜单,可包含6个菜单项。如果添加多于6个菜单项,多出的部分将通过“更多”菜单项在扩展菜单中显示。扩展菜单项在多于6个菜单项时自动添加。选项菜单包含两组菜单项:.图标菜单IconMenu这个是当用户按下菜单键时最初出现屏幕下方的item集合。它支持最多6个菜单项。只有这些菜单支持图标而且这些菜单并不支持checkboxes或者radiobuttons。.扩展菜单ExpandedMenu这是通过按“更多”菜单显现出来的一个竖向的项目列表。它仅当图标菜单过多时存在而且是由6个以及其它选项菜单组成。eg:example9菜单—上下文菜单ContextMenu这是一个浮动菜单列表,通常在你长时间按在一个视图上时出现。Android的上下文菜单在概念上和PC软件的右键菜单类似。当一个视图注册到一个上下文菜单时,执行一个在该对象上的“长按”(按住不动差不多两秒钟)动作,将出现一个提供相关功能的浮动菜单。上下文菜单可以被注册到任何视图对象中,不过,最常见的是用于列表视图ListView的item,在按中列表项时,会转换其背景色而提示将呈现上下文菜单。(电话联系人列表提供了关于这个特性的一个很好的例子)。注意:上下文菜单项不支持图标或快捷键。eg:example10菜单—子菜单Submenu这是一个浮动菜单列表,通过在选项菜单或上下文菜单选择菜单项中显露出来。子菜单的名字显示在头条(Headerbar)上,它的子菜单显示为全文本、checkbox(如果需要)和快捷键等。因为Android不支持嵌套的子菜单,所以你不能为子菜单添加子菜单。和扩展菜单一样,图标也不显示在子菜单项中,按下Back按钮会关闭漂浮的窗口而不会导航回扩展菜单或图标菜单。eg:example11对话框对话框是一种显示与Activity主界面之上的用户界面元素。当Activity需要临时显示一些信息或提供一些功能时,创建一个Activity的开销太大时,对话框是一个不错的选择。几种对话框的效果图如下:对话框eg:example12对话框.日期选择对话框(DatePickerDialog).进度条对话框(ProgressDialog)ProgressDialog常用属性:setProgressStyle:设置进度条风格,风格为圆形,旋转的。setTitlt:设置ProgressDialog标题setMessage:设置ProgressDialog提示信息;setIcon:设置ProgressDialog标题图标;setIndeterminate:设置ProgressDialog的进度条是否不明确;setCancelable:设置ProgressDialog是否可以按返回键取消;setButton:设置ProgressDialog的一个Button(需要监听Button事件);eg:example13eg:example14响应用户界面事件用户界面除了显示给用户看,还需要响应用户的各种操作。Android平台使用回调机制来处理用户界面事件。Activity事件处理分析:publicbooleanonKeyDown(intkeyCode,KeyEventevent)处理手机上按键被按下事件publicbooleanonKeyUp(intkeyCode,KeyEventevent)处理手机上按键松开事件publicbooleanonKeyLongPress(intkeyCode,KeyEventevent)处理手机上按键被长按事件publicbooleanonTouchEvent(MotionEventevent)处理点击屏幕事件publicbooleanonTrackballEvent(MotionEventevent)处理轨迹球事件响应用户界面事件常见view对象事件处理:Android为每个View提供了一种事件监听的接口,每个接口都需要实现一个回调方法,然后使用View的setxxxxListener方法设置事件监听接口。onClick()位于View.OnClickListener中.在用户触摸该对象,或者使用轨迹球等使该对象获得焦点,并按下enter键或者按下轨迹球时被调用.*onLongClick()位于View.OnLongClickListener中.在用户按住该元素,或者按住轨迹球时调用.*onFocusChange()位于View.OnFocusChangeListener中.该对象获得或失去焦点时调用.*onKey()位于View.OnKeyListener中.在该对象获得焦点,并且按下一个键时调用.*onTouch()View.OnTouchListener.当用户在View对象的范围内进行一个触摸动作时.例如按下,放开,或者任何的移动手势.*onCreateContex