您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第6章 UI的基本外形及控制
第6章UI的基本外形和控制AndroidUI系统的知识结构如下图所示:2DOpenGL3DUI键盘事件控件继承关系运动事件屏幕间跳转对话框菜单样式各种控件:文本框/按钮/图像区域/进度条……屏幕元素体系视图组基类独立使用视图组:网页视图/旋转按钮/单选按钮组/……自定义控件XML属性和代码结合各种布局使用使用AdapterView2D绘图接口结构图形/文本/图像的基本绘制路径效果记录绘制Drawable和动画OpenGL接口结构渲染器3D的动画效果控件的基本控制图AndroidUI系统的知识结构对于一个GUI系统地使用,首先是由应用程序来控制屏幕上元素的外观和行为,这在各个GUI系统中是不相同的,但是也具有相通性。Android系统在这方面,包含了基本的控件控制,键盘事件响应,窗口间跳转、对话框、菜单、样式等内容,这是GUI系统所具有的通用内容。6.1控件和基本事件的响应在任何一个GUI系统中,控制界面上的控件(通常称为控件)都是一个基本的内容。对于Android应用程序,控件称为View。53在Android中,在处理UI中的各种元素的时候,两个程序中的要点为:得到布局文件(XML)中的控件句柄设置控件的行为本小节介绍在Android中几种基本的程序控制方法,要获得的效果是通过2个按钮来控制一个文本框的背景颜色,其运行结果如图所示:图控件事件的响应6.1.1.事件响应方法本例构建一个应用程序,其在AndroidManifest.xml描述文件中的内容如下所示:activityandroid:name=TestEvent1android:label=TestEvent1intent-filteractionandroid:name=android.intent.action.MAIN/categoryandroid:name=android.intent.category.LAUNCHER//intent-filter/activity本例定义了一个Android中基本的活动。本例的布局文件(layout)的代码片段如下所示:LinearLayoutxmlns:android=:id=@+id/screenandroid:layout_width=fill_parentandroid:layout_height=fill_parentandroid:orientation=verticalTextViewandroid:id=@+id/text1android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_gravity=centerandroid:textSize=24spandroid:text=@string/text1/Buttonandroid:id=@+id/button1android:layout_width=80spandroid:layout_height=wrap_contentandroid:layout_gravity=centerandroid:text=@string/red/Buttonandroid:id=@+id/button2android:layout_width=80spandroid:layout_height=wrap_contentandroid:layout_gravity=centerandroid:text=@string/green//LinearLayout根据以上的布局文件中定义的两个按钮和一个文本框,这个布局文件被活动设置为View后,显示的内容就如上图所示,只是行为还没有实现。行为将在源代码文件TestEvent1.java中实现,这部分的代码如下所示:packagecom.android.basicapp;importandroid.app.Activity;importandroid.os.Bundle;importandroid.graphics.Color;importandroid.widget.Button;importandroid.widget.TextView;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.util.Log;publicclassTestEvent1extendsActivity{privatestaticfinalStringTAG=TestEvent1;publicTestEvent1(){}@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.testevent);finalTextViewText=(TextView)findViewById(R.id.text1);//获得句柄finalButtonButton1=(Button)findViewById(R.id.button1);finalButtonButton2=(Button)findViewById(R.id.button2);Button1.setOnClickListener(newOnClickListener(){//实现行为功能publicvoidonClick(Viewv){Text.setBackgroundColor(Color.RED);}});Button2.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewv){Text.setBackgroundColor(Color.GREEN);}});}}在创建的过程中,通过findViewById获得各个屏幕上面的控件(控件)的背景,这里使用的R.id.button1等和布局文件中各个元素的id是对应的。实际上,在布局文件中,各个控件即使不写android:id这一项也可以正常显示,但是如果需要在代码中进行控制,则必须设置这一项。根据Button控件的setOnClickListener()设置了其中的点击行为,这个方法的参数实际上是一个View.OnClickListener类型的接口,这个接口需要被实现才能够使用,因此在本例的设置中,实现了其中的onClick()函数。这样既可实现点击的时候实现相应的功能,在点击的函数中,将通过Text的句柄对其进行控制。在Android的控件使用方面,这两个编程方面要点是:使用findViewById()获取布局文件(XML)中控件的句柄;使用setOnXXXListener()设置事件处理函数。在获取句柄时需要转换成相应的控件类型,findViewById()函数的参数是一个整数,返回值是一个android.view.View类型。通过R.id.XXX找到布局文件中定义的ID,然后通过将基础类转换成其实际的类获得真正的句柄。注意:所转换类必须和布局文件中描述的控件一致。SetOnXXXListener()等函数是android.view.View类的函数,各种控件(包括Button、EditText)都扩展这个类,同族的函数包括:voidsetOnClickListener(View.OnClickListenerl);voidsetOnFocusChangeListener(View.OnFocusChangeListenerl);55voidsetOnKeyListener(View.OnKeyListenerl);56voidsetOnLongClickListener(View.OnLongClickListenerl);voidsetOnTouchListener(View.OnTouchListenerl);这些函数用于事件处理,它们由程序实现,通过设置这些内容也就设置了控件的行为。这些函数的参数都是所对应的android.view.View类中的方法。Android中UI基本控制内容:使用findViewById()联系布局文件中控件和句柄,并通过OnClickListener()等定制句柄的行为。6.1.2.第二种响应方法除了上述的使用方法,在使用同样的布局文件和应用程序的情况下,实现同样的功能。本例中使用的是另外的一种方式实现。本例使用的源代码文件如下所示:packagecom.android.basicapp;importandroid.app.Activity;importandroid.os.Bundle;importandroid.graphics.Color;importandroid.widget.Button;importandroid.widget.TextView;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.util.Log;publicclassTestEvent2extendsActivityimplementsOnClickListener{//实现相关的接口privatestaticfinalStringTAG=TestEvent2;privateTextViewmText;privateButtonmButton1;privateButtonmButton2;publicTestEvent2(){}@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.testevent);mText=(TextView)findViewById(R.id.text1);mButton1=(Button)findViewById(R.id.button1);mButton1.setOnClickListener(this);//设置监听的类mButton2=(Button)findViewById(R.id.button2);mButton2.setOnClickListener(this);//设置监听的类}publicvoidonClick(Viewv){Log.v(TAG,onClick());switch(v.getId()){//区分不同的控件caseR.id.button1:mText.setBackgroundColor(Color.RED);break;caseR.id.button2:mText.setBackgroundColor(Color.GREEN);break;default:Log.v(TAG,other);break;}}}这个例子的主要变化是让活动实现(implements)了OnClickListener()这个进口,也就是需要实现其中的onClick()方法。然后通过setOnClickListener()将其设置到按钮中的参数就是this,表示了当前的活动。通过这种方式的设置,如果程序中有多个控件需要设置,那么所设置的也都是一个函数。为了保证对不同控件具有不同的处理,可以由onClick()函数的参数进行判断,参数是一个View类型,通过getId()获得它们的ID,使用switch…case分别进行处理。在本例中,通过将需要将文本框(TextView)句柄保存为类的成员(mText),这样就可以在类的各个函数中都能获得这个句柄进行处理。这和上一种方法是有区别的,因为上一个例子实现的接口和获得的
本文标题:第6章 UI的基本外形及控制
链接地址:https://www.777doc.com/doc-5544207 .html