Android用户界面技术学习目标•Android基本UI组件•Activites•UI设计工具droiddraw•常用UI元素•UI布局Android基本UI组件•Activity(活动)•View(视图)•ViewGroup(视图组)•Layout(布局)Activity(活动)•Activity是为用户操作而展示的可视化用户界面。•一个Activity就是一个屏幕。•对于熟悉其它语言图形用户界面技术,可以理解称为Form(表单)。Activity生命周期•主要有4种状态:–Active(活动)–Paused(暂停)–Stopped(停止)–Dead(死亡)活动、前景状态暂停、背景状态Activity生命周期•其生命周期涉及的函数有:–voidonCreate(BundlesavedInstanceState)–voidonStart()–voidonRestart()–voidonResume()–voidonPause()–voidonStop()–voidonDestroy()View(视图)•android.view.View类,是所有可视化控件都继承了View。View(视图)Control和Widget区别•Control是一些简单功能View。–TextView、EditText、Button、CheckBox、RadioButton、ProgressBar•Widget是由多个简单Control组合起来复杂的View。–Spinner(旋转按钮)、ListView、Gallery、DatePicker视图组(ViewGroup)•在Android中视图组是集合若干个控件在一起的元素,ViewGroup有两种用法,一种是像普通的控件一样使用(如网页视图、旋转按钮、文本切换器、图像切换器、单选按钮组等),另一种是作为布局容器使用(各种布局)。•在屏幕中控件的组织上,可以将各个视图(控件)组成一个视图组(ViewGroup),视图组是一个包含了其他视图的视图。•android.view.ViewGroup扩展了android.view.View,它本身也具有View的特性,区别仅在于它可以包含其他的控件。Android视图和视图组的关系•一个屏幕可以包含一个视图;•视图组本身也是一个视图;•视图组可以包含若干个视图。Android视图和视图组的关系ViewGroup1View2View3ViewGroup2View4View1ViewGroup4View5View6ViewGroup0ViewGroup3Android视图和视图组的关系•其中包含一个视图组ViewGroup0,ViewGroup0包含3个子视图,即View1、ViewGroup1、ViewGroup2。ViewGroup1本身也是视图组,以水平布局的方式包含了View2和View3;ViewGroup2本身也是视图组,以垂直的方式包含了View4、ViewGroup3和ViewGroup4;ViewGroup4本身也是视图组,以水平布局的方式包含了View5和View6。事件处理机制•让图形界面接收用户的操作,就必须给各个控件加上事件处理机制。Android在事件处理的过程中,主要涉及两类对象:–EventSource-事件源,事件发生的场所,通常就是各个组件,例如按钮Button。–Eventhandler-事件处理者,接收事件对象并对其进行处理的对象。事件处理机制publicclassevnet_sampleextendsActivity{/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Buttonbutton=(Button)findViewById(R.id.widget28);button.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){TextViewtext=(TextView)findViewById(R.id.widget29);text.setText(Hello,World!);}});}}控件和基本事件的响应•button是事件源•事件处理程序button.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){TextViewtext=(TextView)findViewById(R.id.widget29);text.setText(Hello,World!);}});另外第二种事件处理方式publicclassevnet_sampleextendsActivityimplementsOnClickListener{@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Buttonbutton=(Button)findViewById(R.id.widget28);button.setOnClickListener(this);}@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.widget28:TextViewtext=(TextView)findViewById(R.id.widget29);text.setText(Hello,World!);}}}另外第三种事件处理方式publicclassevnet_sampleextendsActivity{privateTextViewtext;privateButton1_OnClickListenermListener1=newButton1_OnClickListener();classButton1_OnClickListenerimplementsOnClickListener{publicvoidonClick(Viewv){text.setText(Hello,World!);}}@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);text=(TextView)findViewById(R.id.widget29);Buttonbutton1=(Button)findViewById(R.id.widget28);button1.setOnClickListener(mListener1);}}键盘事件的响应•在应用的程序控制方面,更多的使用是屏幕上的控件,但是有的时候也需要直接对键盘事件来进行响应。键盘是Android中主要的输入设备,对按键响应的处理是响应之间在程序中使用键盘的核心内容。•本例需要实现的内容是通过键盘来控制屏幕上的一个图片的Alpha值,使用上下键减少图片的Alpha值。Java代码publicclassMyKeyEventextendsActivity{privatestaticfinalStringTAG=MyKeyEvent;privateImageViewmImage;privateTextViewmAlphavalueText;privateintmAlphavalue;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);mImage=(ImageView)findViewById(R.id.image);mAlphavalueText=(TextView)findViewById(R.id.alphavalue);mAlphavalue=100;//设置图片的alpha值,alpha是管理图片透明度mImage.setAlpha(mAlphavalue);mAlphavalueText.setText(Alpha=+mAlphavalue*100/255+%);}@OverridepublicbooleanonKeyDown(intkeyCode,KeyEventevent){Log.v(TAG,onKeyDown:keyCode=+keyCode);Log.v(TAG,onKeyDown:String=+event.toString());switch(keyCode){caseKeyEvent.KEYCODE_DPAD_UP:mAlphavalue+=20;break;caseKeyEvent.KEYCODE_DPAD_DOWN:mAlphavalue-=20;break;}if(mAlphavalue=255){mAlphavalue=255;}if(mAlphavalue=0){mAlphavalue=0;}mImage.setAlpha(mAlphavalue);mAlphavalueText.setText(Alpha=+mAlphavalue*100/255+%);returnsuper.onKeyDown(keyCode,event);}}布局文件main.xmlLinearLayoutxmlns:android=:id=@+id/screenandroid:layout_width=fill_parentandroid:layout_height=fill_parentandroid:orientation=verticalTextViewandroid:id=@+id/alphavalueandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_gravity=center/ImageViewandroid:id=@+id/imageandroid:src=@drawable/robotandroid:layout_gravity=centerandroid:layout_width=wrap_contentandroid:layout_height=wrap_content//LinearLayout运行结果解释•onKeyDown()方法来获得按键的事件,同类的方法还包括onKeyUp()方法,其参数intkeyCode为按键码,KeyEventevent表示按键事件的消息(其中包含了更详细的内容)。•基本上通过keyCode可以获得是哪一个按键响应,而通过event除了按键码之外,可以获得按键的动作(抬起、按下)、重复信息等内容。运动事件的处理•触摸屏(TouchScreen)和滚动球(TrackBall)是Android中除了键盘之外的主要输入设备。如果需要使用触摸屏和滚动球,主要可以通过使用运动事件(MotionEvent)用于接收它们的信息。•触摸屏和滚动球事件主要通过重写Activity以下2个方法来接收:–publicbooleanonTouchEvent(MotionEventevent)–publicbooleanonTrackballEvent(MotionEven