Android-应用开发课件_第1页
Android-应用开发课件_第2页
Android-应用开发课件_第3页
Android-应用开发课件_第4页
Android-应用开发课件_第5页
已阅读5页,还剩321页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,Android应用开发课程,学习内容,Android开发简介Android开发环境搭建Android程序设计基础AndroidUI开发Android数据存储技术Android四大组件Android的音频、视频开发Android网络应用开发Android位置服务和Google地图API,Android简介,Android简介,Android一词本意是指“机器人”,是Google在2007年11月5日公布的基亍Linux内核的操作系统,早期由Google开发,后由开放手机联盟开发。市场上第一款支持Android的手机是在2008年9月22日发布的由HTC制造幵由T-Mobile供应的G1。,A

2、ndroid市场份额,Android开发人员薪资调查,特点1,开放的平台应用程序相互平等,其组件也可以更换。Dalvik虚拟机针对移动设备进行了优化。优化的图形能力支持2D、3D图形(OpenGLES1.0)。集成了基于开源WebKit引掣的浏览器。SQLite作为结构化数据存储。,特点2,多媒体支持多种音频、视频格式。支持蓝牙Bluetooth,3G和WiFi支持照相机、GPS、指南针和加速度仪等传感器硬件依托Java丰富的编程资源丰富的开发环境。包括模拟机、调试工具、内存运行检测,以及为EclipseIDE所写的插件。,系统架构,AndoidRuntime,应用开发语言:JavaDalvi

3、k虚拟机指令:DalvikExcutableJava标准库把java代码编译为Dalvik可执行文件(dexformat),开发环境,JDKIDEEclipseEclipseplug-in-ADTSoftwareDevelopmentKit(SDK)AndroidEmulatorDebuger,AndroidSDK,AndroidSDK包括一系列的开发工具以帮助开发者开发和调试应用程序。包含以下几部分:Android应用程序框架APIAndroid模拟器辅助工具:ADB(调试工具)、AAPT(生成APK)、DX(编译工具)、DDMS(调试窗口)Android开发文档,GettingStart,

4、开发环境搭建,安装Android的sdk和eclipse插件开发环境:JDK5或JDK6Eclipse3.5下载ADT的Eclipse插件,第一个Android应用程序,打开eclipse,新建android工程打开Eclipse,新建项目(点击FileNewProject),在项目列表中展开Android目录,选择AndroidProject,如图:,应用程序的名称,包名称,启动类名称,兼容的最低版本,在项目上右键点击runasAndroidapplication,如下图:,Android程序架构,src/java原代码存放目录gen/自动生成目录gen目录中存放所有由Android开发工具

5、自动生成的文件。目录中最重要的就是R.java文件。这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。res/资源(Resource)目录在这个目录中我们可以存放

6、应用使用到的各种资源,如xml界面文件,图片或数据。AndroidManifest.xml功能清单文件这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Aperties项目环境信息,一般是不需要修改此文件,R.java,publicfinalclassRpublicstaticfinalclassattrpublicstaticfinalclassdrawablepublics

7、taticfinalinticon=0 x7f020000;publicstaticfinalclassidpublicstaticfinalintlayout=0 x7f050000;publicstaticfinalclasslayoutpublicstaticfinalintmain=0 x7f030000;publicstaticfinalclassstringpublicstaticfinalintapp_name=0 x7f040001;publicstaticfinalinthello=0 x7f040000;,Activity,importandroid.app.Activit

8、y;importandroid.os.Bundle;publicclassHelloActivityextendsActivity/*Calledwhentheactivityisfirstcreated.*/OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);,Activity的运用,Activity的主要作用创建Activity的方法在AndroidManifest.xml文件中注册Activity方法在Act

9、ivity中添加控件的方法,Activity是android应用程序的用户接口。一个Activity中可以放置很多控件。Activity也可以理解为控件的容器。如图:,按钮,列表,文本,1、一个Activity就是一个类,并且这个类要继承于Activity。2、重写onCreate方法。publicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);3、每一个Activity都需要在AndroidMainfest.xml中文件当中进行配置4、

10、为Activity添加必要的控件。同过findViewById(控件的id);可以得到所要显示的控件。例如:取得TextView的控件TextViewtextView=(TextView)findViewById(R.id.Test);,布局文件,重要属性,android:layout_width宽度android:layout_height高度fill_parent|wrap_contentandroid:layout_weight权重(默认为0)android:id唯一标识用于在程序或配置文件中引用,资源文件,HelloWorld,HelloActivity!Hello应用,资源文件,除s

11、tring之外,还可以定义color,dimen(大小)string-array(子标记为item)每种资源都需要定义name属性资源文件放在res/values目录下,可以是单独的文件,也可以分类放在不同文件中,文件名任意,其他资源,任意XML文件:放入res/xml目录,程序中用R.xml.文件名访问原始资源:放入res/raw目录,程序中用Resources对象.openRawResource(R.raw.XXX)获得一个输入流,原始资源不会被编译为二进制资产:放入assets目录,系统不会自动生成id,程序中用Resources对象.getAssets().open(文件名)获得输入流

12、.资源目录中不能随意创建子目录,资产目录则可以随意创建子目录,引用资源,程序中:利用R.资源类型.资源名访问如:R.layout.mainR.id.abcXML文件中:利用资源类型/资源名访问如:id/abc而+id/abc表示添加一个id资源”abc”程序中:getResources()得到Resources对象用于将资源的id值转为相应的对象如getTextgetColorgetDrawable,Log,android.util.Log类的静态方法来查找错误和打印系统日志消息。Log常用的方法有以下5个:Log.v(Stringtag,Stringmsg);(VERBOSE)Log.d(S

13、tringtag,Stringmsg);(DEBUG)Log.i(Stringtag,Stringmsg);(INFO)Log.w(Stringtag,Stringmsg);(WARN)Log.e(Stringtag,Stringmsg)。(ERROR),Log,当利用DDMS进行调试时,它们的区别并不大,只是显示的颜色不同根据规范建议Log.v、Log.d信息应当只存在于开发过程中,最终版本只可以包含Log.i、Log.w、Log.e这三种日志信息,DDMS,全称是DalvikDebugMonitorServiceDDMS为IDE和emultor及真正的android设备架起来了一座桥梁,A

14、ndroidDDMS将捕捉到终端的ID,并通过adb建立调试器,从而实现发送指令到测试终端的目的。,Activity,多个Activity之间的关系,ActivityA,ActivityB,startActivity(Intent),启动新的Activity,不传递参数,在一个Activity中可以使用系统提供的startActivity(Intentintent)方法打开新的Activity,在打开新的Activity前,你可以决定是否为新的Activity传递参数:第一种:打开新的Activity,不传递参数publicclassMainActivityextendsActivitypro

15、tectedvoidonCreate(BundlesavedInstanceState).Buttonbutton=(Button)this.findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener()/点击该按钮会打开一个新的ActivitypublicvoidonClick(Viewv)/新建一个显式意图,第一个参数为当前Activity类对象,第二个参数为你要打开的Activity类startActivity(newIntent(MainActivity.this,NewActivity.cla

16、ss););,启动新的Activity,并传递参数,publicclassMainActivityextendsActivityprotectedvoidonCreate(BundlesavedInstanceState).button.setOnClickListener(newView.OnClickListener()/点击该按钮会打开一个新的ActivitypublicvoidonClick(Viewv)Intentintent=newIntent(MainActivity.this,NewActivity.class)Bundlebundle=newBundle();/该类用作携带数

17、据bundle.putString(name,“tom);bundle.putInt(age,4);intent.putExtras(bundle);/附带上额外的数据startActivity(intent););在新的Activity中接收前面Activity传递过来的参数:publicclassNewActivityextendsActivityprotectedvoidonCreate(BundlesavedInstanceState)Bundlebundle=this.getIntent().getExtras();Stringname=bundle.getString(name);

18、intage=bundle.getInt(age);,为Intent附加数据的两种写法,第一种写法,用于批量添加数据到Intent:Intentintent=newIntent();Bundlebundle=newBundle();bundle.putString(name,“tom);intent.putExtras(bundle);第二种写法:这种写法的作用等价于上面的写法,只不过这种写法是把数据一个个地添加进Intent,这种写法使用起来比较方便,而且只需要编写少量的代码。Intentintent=newIntent();intent.putExtra(name,“tom);Intent

19、提供了各种常用类型重载后的putExtra()方法,如:putExtra(Stringname,Stringvalue)、putExtra(Stringname,longvalue),在putExtra()方法内部会判断当前Intent对象内部是否已经存在一个Bundle对象,如果不存在就会新建Bundle对象,以后调用putExtra()方法传入的值都会存放于该Bundle对象,下面是Intent的putExtra(Stringname,Stringvalue)方法代码片断:publicclassIntentimplementsParcelableprivateBundlemExtras;p

20、ublicIntentputExtra(Stringname,Stringvalue)if(mExtras=null)mExtras=newBundle();mExtras.putString(name,value);returnthis;,得到Activity返回的数据,如果你想在Activity中得到新打开Activity关闭后返回的数据,你需要使用系统提供的startActivityForResult(Intentintent,intrequestCode)方法打开新的Activity,新的Activity关闭后会向前面的Activity传回数据,为了得到传回的数据,你必须在前面的Act

21、ivity中重写onActivityResult(intrequestCode,intresultCode,Intentdata)方法:publicclassMainActivityextendsActivityOverrideprotectedvoidonCreate(BundlesavedInstanceState).Buttonbutton=(Button)this.findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener()publicvoidonClick(Viewv)/第二个参数为请求码,

22、可以根据业务需求自己编号startActivityForResult(newIntent(MainActivity.this,NewActivity.class),1););/第一个参数为请求码,即调用startActivityForResult()传递过去的值第二个参数为结果码OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata)Stringresult=data.getExtras().getString(“result”);/得到新Activity关闭后返回的数据当新Activity关闭

23、后,新Activity返回的数据通过Intent进行传递,android平台会调用前面Activity的onActivityResult()方法,把存放了返回数据的Intent作为第三个输入参数传入,在onActivityResult()方法中使用第三个输入参数可以取出新Activity返回的数据。,得到Activity返回的数据,使用startActivityForResult(Intentintent,intrequestCode)方法打开新的Activity,新Activity关闭前需要向前面的Activity返回数据需要使用系统提供的setResult(intresultCode,In

24、tentdata)方法实现:publicclassNewActivityextendsActivityOverrideprotectedvoidonCreate(BundlesavedInstanceState).button.setOnClickListener(newView.OnClickListener()publicvoidonClick(Viewv)Intentintent=newIntent();/数据是使用Intent返回intent.putExtra(“result”,“hello”);/把返回数据存入IntentNewActivity.this.setResult(RESU

25、LT_OK,intent);/设置返回数据NewActivity.this.finish();/关闭Activity);setResult()方法的第一个参数值可以根据业务需要自己定义,上面代码中使用到的RESULT_OK是系统Activity类定义的一个常量,值为-1,Activity生命周期,重要数据都写在onPause()里面,最后一个安全生命周期方法,Activity生命周期分类完整生命周期onCreate()onDestroy()可视生命周期onStart()onStop()前台生命周期onResume()onPause(),Activity生命周期,onCreate(Bundleb

26、undle);onStart();onRestart();onResume();onPause();onStop();onDestory();以上七个生命周期函数,是Activity处于不同状态时调用不同的函数。,启动第一个Activity,FirstActivity-onCreate();-onStart();-onResume();,从第一个Activity启动第二个Activity,FirstActivity-onPauseSecondActivity-onCreate-onStart-onResumeFirstActivity-onStop,第二个Activity返回,SecondAc

27、tivityonPause()FirstActivityonRestart()onStart()onResume()SecondActivityonStop()onDestroy(),Task的概念,压栈弹栈,第一个Activity,第二个Activity,第三个Activity,Task运行过程(一),应用程序启动后,运行第一个Activity之后,该Activity对象被压入到Stack之中,FirstActivity,Task运行过程(二),点击按钮后启动第二个Activity,该对象被压入到Stack中,FirstActivity,secondActivity,Task运行过程(三),

28、点击第二个Activity按钮启动,该对象被压入到Stack中,FirstActivity,secondActivity,threeActivity,当点击第三Activity中的按钮启动之后,启动第四个Activity,FirstActivity,secondActivity,threeActivity,SMSActivity,点击Back之后,这时SMSActivity从堆栈中弹出。后面的对象都是一样。所有的Activity在同一个Task,被组织称同一个单元。,FirstActivity,secondActivity,threeActivity,SMSActivity,AndroidUI

29、设计,View和ViewGroup,View:所有组件的父类ViewGroup:View的子类所有容器的父类与Swing不同,容器负责组件的布局,不再需要特定的布局管理器两种声明布局的方式,声明布局的两种方式在XML文件中申明UI组件Android提供了基于xml的节点元素,这些节点元素对应代码中的UI组件。优点:直观简洁,可读性强;实现了UI界面和逻辑代码的分离在代码中构造组件优点:动态布局缺点:抽象模糊,可读性比较差;耦合性强,数据的表现和逻辑错杂很难,XML布局文件,Java代码,LinearLayoutl=(LinearLayout)this.findViewById(R.id.lay

30、out);TextViewtv=newTextView(this);tv.setLayoutParams(newLinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);tv.setText(hello);l.addView(tv);,布局管理器,LinearLayoutTableLayoutRelativeLayoutFrameLayoutAbsoluteLayout,LinearLayoutLinearLayout是一种Android中最常用

31、的布局,它将自己包含的子元素按照一个方向进行排列。方向有两种水平Android:orientation=horizontal子元素从左到右一个一个的水平排列竖直Android:orientation=vertical子元素从上到下一个接着一个的竖直排列,TableLayoutTableLayout是一种表格式的布局。这种布局会把包含的元素以行和列的形式进行排列。表格的列数为每一行的最大列数。当然表格里边的单元格是可以为空。使用TableRow代表一行,每行可以包含一个或多个Cell,每个Cell代表一个View组件。,RelativeLayout允许通过指定显示对象相对于其他显示对象或父级对象

32、的相对位置来布局。取值为像素的属性android:layout_marginLeft左侧留白android:layout_marginRight右侧留白android:layout_Top上方留白android:layout_marginBottom下方留白,RelativeLayout,取值为其他控件idandroid:layout_toRightOf本控件位于给出id控件的右侧android:layout_toLeftOf本控件位于给出id控件的左侧android:layout_above本控件位于给出id控件的上方android:layout_below本控件位于给出id控件的下方and

33、roid:layout_alignTop本控件上边界与给出id控件上边界对齐android:layout_alignBottom本控件下边界与给出id控件下边界对齐android:layout_alignLeft本控件左边界与给出id控件左边界对齐android:layout_alignRight本控件右边界与给出id控件右边界对齐,RelativeLayout,取值为booleanandroid:layout_centerHorizontal位于父组件横向中间android:layout_centerVertical位于父组件纵向中间android:layout_centerInParent

34、位于父组件中央android:layout_alignParentBottom底端与父组件底端对齐android:layout_alignParentLeft左端与父组件左端对齐android:layout_alignParentRight右端与父组件右端对齐android:layout_alignParentTop顶端与父组件顶端对齐android:layout_alignWithParentIfMissing参照组件不存在时参照父组件,RelativeLayout,FrameLayoutFrameLayout对象就好比一块在屏幕上提前预订好的空白区域,然后你可以填充一些元素到里边。注意:所

35、有的元素都被放置在FrameLayout区域最左上的区域。而且无法为这些元素指定一个确切的位置。如果一个FrameLayout里边有多个子元素,那么后边的子元素的显示会重叠在前一个元素上.,AbsoluteLayout,绝对布局容器不负责组件的位置开发人员通过android:layout_x,android:layout_y两个属性来指定组件的位置,AbsoluteLayout,事件处理模型,基于回调的事件处理基于监听接口的事件处理Handler,基于回调的事件处理,在Activity和View类中,定义了若干回调方法,可以覆盖这些方法来实现事件处理返回boolean值,true表示事件处理完

36、了onKeyDown(intkeyCode,KeyEventevent)onKeyUp(intkeyCode,KeyEventevent)onTouchEvent(MotionEventevent)event.getAction()=MotionEvent.ACTION_DOWNevent.getAction()=MotionEvent.ACTION_UPevent.getAction()=MotionEvent.ACTION_MOVE,基于监听接口的事件处理,对View调用setOnXXXListener(listener)View类中若干内部接口:OnClickListener:点击事件O

37、nLongClickListener:长时点击OnFocusChangeListener:焦点改变OnKeyListener键盘事件OnTouchListener触摸事件OnCreateContextMenuListener上下文菜单显示事件,Handler,android.os包用于线程间传递消息线程间需要共享同一个Handler对象handlerMessage(Messagemsg)处理消息,需要在接收消息的线程中覆盖该方法sendEmptyMessage(intwhat)发送空消息,在handlerMessage中,通过msg.what查看what值sendMessage(Message

38、msg)发送消息,Handler示例,HandlermyHandler=newHandler()/创建一个Handler对象publicvoidhandleMessage(Messagemsg)/重写接收消息的方法switch(msg.what)/判断what的值case0:/what值为0时myImageView.setImageResource(R.drawable.bbta);break;case1:/what值为1时myImageView.setImageResource(R.drawable.bbtb);break;case2:/what值为2时myImageView.setImag

39、eResource(R.drawable.bbtc);break;case3:/what值为3时myImageView.setImageResource(R.drawable.bbtd);break;super.handleMessage(msg);,Handler示例,intwhat=1;publicvoidrun()/重写的run方法while(true)/循环activity.myHandler.sendEmptyMessage(what+)%4);/发送消息tryThread.sleep(2000);/睡眠catch(Exceptione)/捕获异常e.printStackTrace(

40、);/打印异常信息,AndroidUI组件,组件特性组件的继承关系组件的XML属性XML属性遵从组件的继承关系组件的方法每个XML属性会有相应的Java方法组件可以添加的监听接口,TextView,文本视图不可编辑android:autoLink将指定格式的文本显示为链接取值:none|web|email|phone|map|allandroid:gravity:在x轴和y轴的显示方向android:heightandroid:width高度和宽度以像素为单位android:hint当内容为空时显示的文本(输入框提示)android:text文本内容android:textColor文本颜色a

41、ndroid:textSize字体大小android:typeface文本字体android:ellipsize显示内容超出长度时如何省略取值none|start|middle|end|marquee,EditText,TextView的子类文本输入框android:lines:固定的行数android:maxLinesandroid:minLines最大和最小行数android:password是否显示为密码android:phoneNumber内容只能是电话号码android:scrollHorizontally是否可以水平滚动android:selectAllOnFocus当获得焦点时自

42、动选中全部内容android:singleLine单行模式android:maxLength最大宽度,ImageView图片组件,属性:android:src要显示的图片android:maxHeight最大高度android:maxWidth最大宽度方法:setImageResource(intresid)设置图片setImageURI(Uriuri)设置图片为指定的URIsetImageBitmap(Bitmapbm)设置图片为指定的Bitmap对象setImageDrawable(Drawabled)设置图片为指定的Drawable,按钮组件,ButtonTextView的子类可以添加V

43、iew.OnClickListenerToggleButtonButton的子类状态按钮android:textOff按钮未被选中时显示的文本android:textOn按钮被选中时显示的文本可以添加监听:CompoundButton.OnCheckedChangeListener,ToggleButton示例:灯泡开关,ToggleButtonbutton=(ToggleButton)this.findViewById(R.id.mybutton);button.setOnCheckedChangeListener(newOnCheckedChangeListener()publicvoid

44、onCheckedChanged(CompoundButtonbuttonView,booleanisChecked)setBulbState(isChecked););publicvoidsetBulbState(booleanstate)ImageViewview=(ImageView)this.findViewById(R.id.myview);if(state)view.setImageResource(R.drawable.bulb_on);elseview.setImageResource(R.drawable.bulb_off);,ToggleButton示例:灯泡开关,Imag

45、eButton图片按钮,Button的子类不能定义text属性XML属性:android:src设置按钮上的图片技巧不同的按钮状态显示不同的图片在res/drawable-mdpi中定义myselector.xml在ImageButton的定义中,设置android:src=”drawable/myselector”,RadioButton单选按钮,Button的子类XML属性android:checked初始时是否选中RadioGroupLinearLayout的子类同组的RadioButton在声明时要放在RadioGroup标签中RadioGroup注册监听:RadioGroup.OnC

46、heckedChangeListener可以获得被选中的RadioButton的idRadioButton注册监听:CompoundButton.OnCheckedChangeListener,CheckBox多选按钮,Button的子类XML属性android:checked初始时是否选中CheckBox注册监听:CompoundButton.OnCheckedChangeListener,时钟组件,AnalogClock模拟时钟DigitalClock数字时钟TextView的子类,DatePicker日期选择器,XML属性android:startYear起始年份android:endY

47、ear终止年份方法getDayOfMonth()获取日期天数getMonth()获取日期月份getYear()获取日期年份setEnabled(booleanenabled)控制控件是否可用updateDate(intyear,intmonth,intday)更新控件属性值init(intyear,intmonth,intday,DatePicker.OnDateChangedListenerl)初始化属性,设置监听器,TimePicker时间选择器,方法:getCurrentHour()获得当前小时getCurrentMinute()获得当前分钟is24HourView()是否是24小时制s

48、etIs24HourView(booleanb)设置24小时制setCurrentHour(inth)设置小时setCurrentMinute(intm)设置分钟setOnTimeChangedListener(TimePicker.OnTimeChangedListenerl)监听,ScrollView,FrameLayout的子类为组件提供滚动功能只能包含一个View,AdapterView,以下组件均包含多行数据,需要适配器的配合通过setAdapter()方法设置AutoCompleteTextViewListViewGridViewGallerySpinner,Adapter适配器,

49、数据与UI组件分离MVC架构模式,自定义适配器,继承BaseAdaptergetCount():返回数据个数getView():返回某一行的显示组件例如:对于ListView需要返回一个水平排列的LinearLayout,作为某一行的组件对于Gallery需要返回一个ImageView,作为画廊中的某个图片,ArrayAdapter,通过构造方法创建对象构造参数:Context,Layout的id,数据Layout用于显示数据,常用内置的Layout数据可以是数组,也可以是List从外部数组资源中获取数据:通过静态方法createFromResource创建对象参数:Context,R.arr

50、ay.XXX,Layout的id,SimpleCursorAdapter,用于组织从数据库中查询到的数据数据封装在Cursor对象中构造参数:ContextLayout的id常用内置LayoutCursor查数据库返回的对象StringfromCursor中的数据列名intto数据映射到Layout中的TextView组件id,SimpleAdapter,构造参数ContextdataAListofMap,每个Map代表一行数据,key为String,表示列名.对于图片的列值,存放的是图片的id,对于字符串的列值,存放的是字符串值Layout的id,代表每行的显示组件,可以是内置的Layout

51、,也可以自定义布局文件的idStringfrom列名数组,对应Map中的keyintto数据映射到Layout中的TextView组件id,AutoCompleteTextView,自动完成的文本输入框XML属性:android:completionThreshold需要用户输入的字符数android:dropDownHeightdropDownWidth下拉列表的高度,宽度常见的内置Layout:android.R.layout.simple_dropdown_item_1line,ListView,将Adapter提供的组件显示在垂直可滚动的列表中常见的内置Layout的idandroid

52、.R.layout.simple_list_item_1其中的TextView组件的id:android.R.id.text1设置监听AdapterView.OnItemSelectedListener键盘选择AdapterView.OnItemClickListener触摸屏选择,ListView,如果一个Activity只含有一个ListView,可以直接继承ListActivity那个ListView的id必须为android:id/list(注意)调用getListView()方法获得组件在ListActivity的子类中,覆盖onListItemClick(ListViewl,Vie

53、wv,intposition,longid)其中v是被点击的组件,position是索引,可以将Cursor移动到position位置上,来获取数据,id是对应数据项的id带多选框的ListView,GridView,网格视图XML属性android:columnWidth列宽android:horizontalSpacingverticalSpacing单元格之间水平,垂直距离常用SimpleAdapter来提供数据设置监听AdapterView.OnItemSelectedListener键盘选择AdapterView.OnItemClickListener触摸屏选择,Spinner,下拉

54、列表常用内置的Layout的idandroid.R.layout.simple_spinner_item设置下拉箭头的样式adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);设置监听AdapterView.OnItemSelectedListener,Gallery画廊,继承BaseAdapter,getView方法返回一个ImageView设置监听AdapterView.OnItemSelectedListenerXML属性android:animationDuration动画过渡时间a

55、ndroid:unselectedAlpha未选中图片的透明度android:spacing图片间空白大小,ProgressBar进度条,常常用单独的线程来设置进度XML属性android:max最大进度android:progress当前进度style=android:style/Widget.ProgressBar或是android:style/Widget.ProgressBar.Horizontalandroid:secondaryProgress在进度条中的一个进度标记setProgress()设置当前进度,SeekBarRatingBar,SeekBarProgressBar的子类

56、拖拉条添加监听SeekBar.OnSeekBarChangeListenerRatingBarProgressBar的子类星级滑块XML属性android:max全部星块数量android:rating初始星块数量添加监听RatingBar.OnRatingBarChangeListener,TabHost选项卡,创建方法一:在main.xml中定义FrameLayout为根节点,其中放入若干LinearLayoutJava代码中继承TabActivity,不使用setContentView,而使用:LayoutInflaterinflater=LayoutInflater.from(this

57、);inflater.inflate(R.layout.main,getTabHost().getTabContentView(),true);,TabHost选项卡,创建方法二:在main.xml中定义TabHost为根节点,放入LinearLayout(垂直),其中放入TabWidget(宽度fill_parent)和FrameLayout.FrameLayout中放入若干LinearLayout注意组件的id限制:TabHostid=android:id/tabhostTabWidgetid=android:id/tabs(必须是这个)FrameLayoutid=android:id/t

58、abcontent(同上)Java代码继承TabActivity,通过getTabHost()拿到TabHost对象,TabHost选项卡,使用方法:对TabHost对象调用newTabSpec(“Tag”)方法创建一个TabHost.TabSpec对象对Spec对象调用setIndicator()方法,设置标签头,可以设置选项卡标题,选项卡图标对spec对象调用setContent方法设置内容,参数为该选项卡对应的LinearLayout的id.对TabHost对象调用addTab()方法,添加spec对象可以对TabHost对象设置监听TabHost.OnTabChangeListener

59、,publicclassTabHostActivityextendsTabActivitypublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);TabHosttabHost=this.getTabHost();LayoutInflater.from(this).inflate(R.layout.main,tabHost.getTabContentView(),true);TabHost.TabSpecspec1=tabHost.newTabSpec(x1);/创建标签为选项卡1的选项卡/指定选项卡的标签和小图标spec1=spec1.setIndicator(选项卡1,getResources().getDrawable(R.drawable.png1);/指定选项卡的内容spec1=spec1.setContent(R.id.linearLayout01);/将选项卡添加到TabHost中tabHost.addTab(spec1);TabHost.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论