版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 Data WarehouseAndroid平台手机嵌入式开发平台手机嵌入式开发第三讲 高级用户界面设计-视图组件Views.1 主要内容:主要内容:u视图组件视图组件u小部件(小部件(WidgetsWidgets)u菜单菜单u对话框对话框u消息提示条消息提示条2 主要内容:主要内容:通过前面的介绍,了解了Android平台中布局、视图、小部件的相同点和不同点:相同点:这三者都是可以显示的组件相同点:这三者都是可以显示的组件不同点:从角色定义上不同点:从角色定义上布局:注重整体,好比设计图小部件(widget):注重的是细节,好比装饰品视图(view):注重的是组件的组合,好比组合家具本讲重点
2、讲解各视图组件和小部件的使用本讲重点讲解各视图组件和小部件的使用3 3.1:视图组件(:视图组件(Views)1 1、视图的使用模式:、视图的使用模式:u视图组件的定义和使用视图组件的定义和使用和布局组件的定义一样,也有在和布局组件的定义一样,也有在运行时创建运行时创建和和使用使用XMLXML这两种方这两种方式。式。和布局组件的不同之处在于,布局组件一般都是布局资源的根元布局组件一般都是布局资源的根元素素;而视图组件更多的包含于布局之内视图组件更多的包含于布局之内,使用时必须使用findViewByID()findViewByID()方法但也有个别视图组件标记根元素:个别视图组件标记根元素:如
3、画廊视图和网页视图如画廊视图和网页视图使用时可以直接设置为内容,引用方法和布局一样:使用时可以直接设置为内容,引用方法和布局一样:R.layout.R.layout. ,setContentView()setContentView()4 3.1:视图组件(:视图组件(Views)1 1、视图的使用模式:、视图的使用模式:u视图组件的事件响应视图组件的事件响应当用户与屏幕显示的组件进行交互时,组件需要侦听用户的选择,并进行当用户与屏幕显示的组件进行交互时,组件需要侦听用户的选择,并进行相应的响应。相应的响应。下表是view组件的事件及侦听器类型举例事件侦听器类型事件侦听器类型 对应的事件对应的事
4、件 说明说明View.OnClickListeneronClick()点击事件View.OnFocusChangeListeneronFocusChange()焦点改变事件View.OnKeyListeneronKey()击键事件View.OnTouchListeneronTouh()触摸事件View.OnLongClickListeneronLongClick()长点击事件View.OnCreateContextMenuListeneronCreatContextMenu()创建上下文菜单事件5 3.1:视图组件(:视图组件(Views)1 1、视图的使用模式:、视图的使用模式:u视图组件的
5、事件响应视图组件的事件响应在Android平台中,开发人员可以通过三种方式来设置事件侦听:三种方式来设置事件侦听:l1 1)、先定义事件侦听器,后注册给需要侦听用户动作的组件:)、先定义事件侦听器,后注册给需要侦听用户动作的组件:private private OnClickListener mListener OnClickListener mListener = = new OnClickListener() new OnClickListener() OverrideOverridepublic void onClick(View v) public void onClick(View
6、v) if (v.getId() = R.id.BTN_ACTION) if (v.getId() = R.id.BTN_ACTION) Toast.makeText(EventHandleDemoAct.this, Hello, Android!,Toast.makeText(EventHandleDemoAct.this, Hello, Android!,Toast.LENGTH_SHORT).show();Toast.LENGTH_SHORT).show(); ;mBtnAction.setOnClickListener(mListener);6 3.1:视图组件(:视图组件(Views
7、)u视图组件的事件响应视图组件的事件响应l2 2)、重载用于侦听用户动作的事件回调函数)、重载用于侦听用户动作的事件回调函数public class EventHandleDemoAct extends Activity implements OnClickListener public void onClick(View v) / TODO Auto-generated method stubif (v.getId() = R.id.BTN_ACTION) Toast.makeText(EventHandleDemoAct.this, Hello, Android!,Toast.LENGTH
8、_SHORT).show();mBtnAction.setOnClickListener(this);l参考例子:参考例子: Ch03_EventHandleDemo Ch03_EventHandleDemo7 3.1:视图组件(:视图组件(Views)u视图组件的事件响应视图组件的事件响应l3 3)、在)、在XMLXML文件中使用文件中使用android:onClickandroid:onClick属性配置对应的方法属性配置对应的方法在在Activity中编写一个包含中编写一个包含View类参数的方法,并且将要触发的动作代码类参数的方法,并且将要触发的动作代码放在该方法中,然后再布局文件中,
9、通过放在该方法中,然后再布局文件中,通过android:onClick属性指定对应的属性指定对应的方法名实现。方法名实现。public void myClick(View view)public void myClick(View view)/编写要执行的动作代码编写要执行的动作代码 在布局文件中通过在布局文件中通过androidandroid:onClick=“myClick”onClick=“myClick”语句添加点击事件监听器语句添加点击事件监听器8 3.2:小部件(:小部件(widgets)1 1、widgetswidgets介绍:介绍:l小部件widget都是指在界面框架中比较独立
10、的视图组件,不作为容器不作为容器组件组件。例如:文本视图:TextView、按钮Button、图片视图ImageViewl小部件定义在小部件定义在android.widgetandroid.widget包中包中l小部件既可以在XML中定义,也可以在代码中定义。在在XMLXML中小部件的中小部件的定义都是在布局或者一些视图组件的定义体内,不会定义为布局资源定义都是在布局或者一些视图组件的定义体内,不会定义为布局资源的根元素。的根元素。9 3.2:小部件(:小部件(widgets)2 2、小部件的使用:、小部件的使用:l引用资源引用资源:对于XML中定义的小部件,对小部件的使用,也必须先使用也必须
11、先使用资源填充器资源填充器inflaterinflater对对XMLXML资源进行填充资源进行填充InflateInflate;然后通过该资源文件对应的Activity组件或者小部件的父视图对象的findViewById()findViewById()方方法法来获取资源ID指定的小部件对象实例l动态创建动态创建:在java代码中可以直接使用new语句来创建小部件对象实例,然后再添加到父视图中,添加时需要指明布局参数,定义如何放置小部件10 3.2:小部件(:小部件(widgets)3 3、事件响应:、事件响应:从设计角度,小部件正是用于与用户进行交互的。对其事件的响从设计角度,小部件正是用于与
12、用户进行交互的。对其事件的响应也是最全面的应也是最全面的在使用的过程中,必须先注册相应类型在使用的过程中,必须先注册相应类型事件侦听器事件侦听器(Listener)(Listener),在该侦听器的事件在该侦听器的事件回调方法中回调方法中再对该事件进行相应处理。再对该事件进行相应处理。11 3.2:小部件(:小部件(widgets)4 4、具体小部件、具体小部件widgetwidget介绍:介绍:u一:显示和编辑文本的组件:一:显示和编辑文本的组件:在在SDKSDK中,提供了中,提供了TextViewTextView、EditTextEditText组件,分别用来显示和组件,分别用来显示和编辑
13、文本,还提供了编辑文本,还提供了MultiAutoCompleteTextViewMultiAutoCompleteTextView组件来自动组件来自动完成需要输入的文本内容。完成需要输入的文本内容。12 3.2:小部件(:小部件(widgets)u1 1: TextView TextView组件:组件: ch03_textview ch03_texthtmlviewch03_textview ch03_texthtmlviewlXMLXML定义:定义:TextView 13 3.2:小部件(:小部件(widgets)u1 1: TextView TextView组件:组件:l属性介绍:属性介
14、绍:android:gravityandroid:gravity:设置文本位置,如设置成:设置文本位置,如设置成“centercenter”,文,文本将居中显示;本将居中显示;center_verticalcenter_vertical、center_horizontalcenter_horizontalandroid:passwordandroid:password:tureture:以小点:以小点”.”.”显示文本显示文本android:password=tureandroid:textColorandroid:textColor: :设置文本颜色设置文本颜色textView.setTex
15、tColor(android.graphics.Color.RED);android:padding:设置文字距离TextView组件的间距,可以有paddingLeft、paddingRight、paddingTop、paddingBottom属性14 3.2:小部件(:小部件(widgets)l属性介绍:属性介绍:android:layout_margin:TextView组件距离相邻组件的间距有marginLeft、marginRight、marginTop、marginBottom属性android:text:设置显示文本:设置显示文本JavaJava代码中设置代码中设置texttex
16、t:setText()setText()setText():setText():如果想设置一个int类型的值(不是资源ID),此时需要使用String.valueOf()String.valueOf()方法将int转换15 3.2:小部件(:小部件(widgets)l属性介绍:属性介绍:背景色设置:方法有三背景色设置:方法有三SetBackgroundResourceSetBackgroundResource:使用颜色资源:使用颜色资源IDID设置设置textView.setBackgroundResource(R.color.background);SetBackgoundColorSetB
17、ackgoundColor:通过颜色值设置:通过颜色值设置textView.setBackgroundColor(android.graphics.Color.REDSetBackgoundDrawableSetBackgoundDrawable:通过:通过DrawableDrawable对象设置对象设置Resources resources=getBaseContext().getResources();Drawable drawable=resources.getDrawable(R.color.background);textView.setBackgroundDrawable(draw
18、able);16 3.2:小部件(:小部件(widgets)l属性介绍:属性介绍:android:autoLink:设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。TextView组件可以自动识别。可选值:可选值:none:不匹配任何链接,默认值web:匹配web网址email:匹配email网址phone:匹配电话号码map:匹配映射地址all:匹配所有的链接17 3.2:小部件(:小部件(widgets)android:autoLink:如果如果TextView组件不设置该属性,组件不设置该属性,则需要使用则需要使用HTML的的标签。标签。XML中:中:
19、在文本中使用在文本中使用标签指定链接及链接文本。标签指定链接及链接文本。XML布局文件中不能直接使用布局文件中不能直接使用,因此要在字符串资源文件中指定相应的文本,然后在布,因此要在字符串资源文件中指定相应的文本,然后在布局文件中指定字符串资源局文件中指定字符串资源ID作者博客:作者博客:http:/android:text=string/link_text_manual/18 3.2:小部件(:小部件(widgets)android:autoLink:JAVA代码中:代码中:需要使用需要使用android.text.html类的类的fromHtml()方法方法进行转换。进行转换。textVi
20、ew2.setText(Html.fromHtml(作者博客:http:/h1号字、斜体、蓝色h3号字李宁);19 3.2:小部件(:小部件(widgets)u其他知识点介绍:其他知识点介绍:lDrawable:Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象,最终将这种可画对象显示在画布上lLayoutInflater:它的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout
21、下xml布局文件,并且实例化!而findViewById()是找具体xml下的具体 widget控件(如:Button,TextView等)。20 4.2:小部件(:小部件(widgets)u2 2: EditText EditText组件组件: ch03_edittext ch03_edittext是TextView的子类,具有TextView组件的一切属性和方法。区别:开发中一般使用区别:开发中一般使用EditTextEditText组件输入文本,组件输入文本,TextViewTextView组组件显示文本件显示文本EditText 21 3.2:小部件(:小部件(widgets)u2 2
22、: EditText EditText组件组件:属性介绍属性介绍l可以通过多种方式指定允许输入的字符可以通过多种方式指定允许输入的字符Android:digits:设置允许输入哪些字符。如“1234567890.+-*/% ()”/设置只接受某些数字,0123456789 /只接受某些字母:abcdefg.xyzandroid:numeric:integer“ /设置只能输入整数,如果是小数则是:decimalandroid:inputType:设置文本的类型,用于帮助输入法显示合适的键盘类型,如textEmailAddress,会显示一些等特殊字符键盘22 3.2:小部件(:小部件(widg
23、ets)u2 2: EditText EditText组件组件:Android:visibility:设置组件是否可见invisible:不可见,布局中仍然留出位置gone:不可见,布局中不会留出位置visible:可见Android:autoText :/自动拼写帮助Android:capitalize :/首字母大写Android:singleLine :/是否单行或者多行,回车是离开文本框还是文本框增加新行Android:password :/密码Android:phoneNumber: / 输入电话号码Android:editable :/是否可编辑23 3.2:小部件(:小部件(wi
24、dgets)u3 3: AutoCompleteTextView AutoCompleteTextView组件:组件:ch03_autotextch03_autotext该组件和EditText组件类似,都可以输入文本;不同点:该组件可以绑定一个字符串数组或者不同点:该组件可以绑定一个字符串数组或者ListList对象,当输入两对象,当输入两个及以上字符时,系统将在该组件下方列出被绑定对象中所有以个及以上字符时,系统将在该组件下方列出被绑定对象中所有以输入字符开头的字符串输入字符开头的字符串lLayout XMLLayout XML24 3.2:小部件(:小部件(widgets)u3 3: A
25、utoCompleteTextView AutoCompleteTextView组件:组件:lActivityActivity如果需要实现辅助输入列表,在如果需要实现辅助输入列表,在ActivityActivity中还需要使用中还需要使用AdapterAdapter对象。对象。String autoString = new String a, ab, abc, bb, bcd, bcdf, 手机, 手机操作系统, 手机软件 ;ArrayAdapter adapter = new ArrayAdapter(this,ArrayAdapter adapter = new ArrayAdapter(
26、this,android.R.layout.simple_dropdown_item_1line, autoString);android.R.layout.simple_dropdown_item_1line, autoString);/ AutoCompleteTextViewAutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);autoCompleteTextView.setAdapter(adapter);autoComplet
27、eTextView.setAdapter(adapter);25 3.2:小部件(:小部件(widgets)u4 4: MultiAutoCompleteTextView组件:组件:连续输入组件,在连续输入组件,在AutoCompleteTextView上进行的扩展。当输入完一个字符串后,输入逗号,然后再输入其他字符,系统仍然会显示辅助输入列表。26 3.2:小部件(:小部件(widgets)u4 4: MultiAutoCompleteTextView组件:组件:lActivityActivity说明:说明:除了使用除了使用AdapterAdapter之外,还需要说明字符串之间的分隔符。之外
28、,还需要说明字符串之间的分隔符。multiAutoCompleteTextView.setAdapter(adapter);multiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer(); 27 3.2:小部件(:小部件(widgets)u5 5: 按钮与复选框组件:按钮与复选框组件:按钮可分为多种形式:如普通按钮普通按钮ButtonButton、带图像的按钮带图像的按钮ImageButtonImageButton、选项按钮、选项按钮RadioButtonRadioButton。l普通按
29、钮普通按钮Button Button ch03_buttonch03_buttonButtonButton组件的基本用法与组件的基本用法与TextViewTextView、EditTextEditText没有太大的差异没有太大的差异定义:定义:Button android:id=+id/button1 28 3.2:小部件(:小部件(widgets)属性:属性:android:background:#aa00aa-设置按钮背景颜色android:drawableX:在按钮的文字上下左右显示图片android:drawableTop=drawable/star“android:drawableB
30、ottom= drawable/star“android:drawableLeft= drawable/star“android:drawableRight=drawable/star“29 3.2:小部件(:小部件(widgets)事件:事件:单击事件单击事件(onClick)(onClick)触摸事件(触摸事件(onTouchonTouch)焦点变化事件(焦点变化事件(onFocusChangeonFocusChange)键盘事件(键盘事件(onKeyonKey): :button1 = (Button) findViewById(R.id.button1);button1.setOnCl
31、ickListener(this);button1.setOnTouchListener(this);button1.setOnFocusChangeListener(this);button1.setOnKeyListener(this);30 3.2:小部件(:小部件(widgets)l图像按钮图像按钮Button ch_03_imagebuttonButton ch_03_imagebutton,ch_03_imagetextbuttonch_03_imagetextbuttonImageButton是ImageView的子类,不是TextView的子类。XMLXML定义:定义:Imag
32、eButton /31 3.2:小部件(:小部件(widgets)l单选按钮单选按钮RadioButton ch_03_radiobuttonRadioButton ch_03_radiobutton该组件为该组件为ButtonButton的子类,因此很多属性和事件都可以使用的子类,因此很多属性和事件都可以使用用于多选一的应用中,如果想在选中某一个选项后,其他的单选按钮都被设置为未选中状态,需要将RadioButton放置在中XMLXML定义定义RadioGroup RadioButton 32 3.2:小部件(:小部件(widgets)l开关状态按钮组件开关状态按钮组件ToggleButto
33、n ch_03_togglebuttonToggleButton ch_03_togglebutton该组件与Button组件的功能基本相同,用法也与Button基本相同。但该该组件还提供了可以表示组件还提供了可以表示开开/ /关关状态的功能,类似于复选框状态的功能,类似于复选框。该组件在按钮文字的下方显示一个绿色的指示条来表示开/关状态,XMLXML定义:定义:33 3.2:小部件(:小部件(widgets)l开关状态按钮组件开关状态按钮组件属性:属性:CheckedChecked:tureture:指示条显示蓝色,:指示条显示蓝色,falsefalse:白色:白色可以通过可以通过setCh
34、ecked()setChecked()方法来设置方法来设置android:textOff:“关闭”文本 android:textOn:“开启”文本34 3.2:小部件(:小部件(widgets)l复选框按钮复选框按钮CheckBox CheckBox ch_03_dynamiccheckboxch_03_dynamiccheckbox该组件用于多选应用该组件用于多选应用XMLXML定义定义CheckBox 主要属性:主要属性:Android:checked:Android:checked:设置复选框的状态,ture:选中,false:不选还可以通过setChecked()setChecked(
35、)方法设置该属性isChecked:判断是否被选中动态创建组件示例:参考例子动态创建组件示例:参考例子ch_03_dynamiccheckboxch_03_dynamiccheckbox35 3.2:小部件(:小部件(widgets)u6 6: 日期与时间组件:日期与时间组件: 参考案例:参考案例:ch_03_datetimepickerch_03_datetimepickerAndroid SDK提供了两个组件:DatePickerDatePicker和TimePickerTimePicker,可以可视化输入日期和时间同时SDK提供了显示时间的组件:DigitalClockDigitalCl
36、ock和AnalogClockAnalogClock,分别以数字方式和表盘方式显示时间分别以数字方式和表盘方式显示时间。lDatePickerDatePickerXMLXML定义:定义:DatePicker 36 3.2:小部件(:小部件(widgets)lDatePickerDatePicker方法介绍:方法介绍:getYear():获得当前的年份getMonth():获得当前的月份getDayOfMonth():获得当前的日期init(2001, 1, 25, OnDateChangedListener):初始化初始化DatePicker组件,并设组件,并设置日期变化的事件监听器置日期变化
37、的事件监听器datePicker.init(2001, 1, 25, this);37 3.2:小部件(:小部件(widgets)u6 6: 日期与时间组件:日期与时间组件:lTimePicker TimePicker 默认情况下市默认情况下市1212小时进制,可以通过小时进制,可以通过setIs24HourView(true)设置设置XMLXML定义:定义:TimePicker 38 3.2:小部件(:小部件(widgets)lTimePicker TimePicker 方法介绍:方法介绍:getCurrentHour() :获得当前的小时setCurrentHour() :设置当前的小时g
38、etCurrentMinute() :获得当前的分钟setCurrentMinute() :设置得当前的分钟setOnTimeChangedListener():设置onTimeChanged事件监听器39 3.2:小部件(:小部件(widgets)l显示时钟的组件:显示时钟的组件:AnalogClockAnalogClock和和DigitalClock DigitalClock ch_03_clockch_03_clock以表盘和数字方式显示时间:以表盘和数字方式显示时间:XMLXML定义定义40 3.2:小部件(:小部件(widgets)u7 7: 进度条组件:进度条组件: 参考案例:参考
39、案例:ch03_datetimepickerch03_datetimepicker任务或者工作完成率是软件展现给用户的一些基本信息,一般通过进度条来展现。它还有一个次要的进度条次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度。一个进度条也可不确定其进度。在不确定模式下,进度条显示循环动画循环动画。这种模式常用于应用程序使用任务的长度是未知的Android SDK提供了ProgressBarProgressBar组件来展示进度条,同时提供了SeekBarSeekBar和RatingBarRatingBar组件,这两个组件在ProgressBar组件上做了进一步的改进。41 3.2:小
40、部件(:小部件(widgets)lProgressBar ProgressBar XMLXML定义:定义:ProgressBar 属性介绍:属性介绍:该组件在默认情况下是圆形的进度条,可以通过该组件在默认情况下是圆形的进度条,可以通过stylestyle属性修改进度条为大、属性修改进度条为大、中、小三种形式的进度条,同时可以设置为水平进度条中、小三种形式的进度条,同时可以设置为水平进度条style=“?android:attr/progressBarStyleHorizontal” :水平进度条水平进度条android:progressBarStyle:默认进度条样式默认进度条样式style=
41、“?android:attr/progressBarStyleLarge” 圆形进度条圆形进度条style=?android:attr/progressBarStyleSmall style=?android:attr/progressBarStyleSmallTitle42 3.2:小部件(:小部件(widgets)lProgressBar ProgressBar 属性介绍:属性介绍:android:max=“100” :设置进度条总刻度android:progress=“30”:设置进度条当前刻度值43 3.2:小部件(:小部件(widgets)lSeekBar SeekBar ch_03
42、_seekbar ch_03_seekbarXMLXML定义:定义:SeekBar lRatingBar RatingBar ch_03_ratingbar ch_03_ratingbarXMLXML定义:定义:RatingBar 44 3.1:视图组件(:视图组件(Views)2 2、常见视图组件:、常见视图组件:u适配器视图适配器视图(AdapterView)(AdapterView)视图组件的继承关系如右图所示:适配器视图组件是部分视图适配器视图组件是部分视图组件的父类。该视图组件需要组件的父类。该视图组件需要使用使用适配器适配器来显示数据,来显示数据,45 3.1:视图组件(:视图组件
43、(Views)2 2、常见视图组件:、常见视图组件:u适配器视图适配器视图(AdapterView)(AdapterView)lAdapterViewAdapterView的直接子类的直接子类: :AbsListView, AbsSpinnerAbsListView, AbsSpinnerl AdapterViewAdapterView的间接子类的间接子类ExpandableListView, Gallery,ExpandableListView, Gallery,GridView, ListView, SpinnerGridView, ListView, Spinner适配器视图类是一个抽象
44、类,无法直接创建该类的实例,只能通过继承该适配器视图类是一个抽象类,无法直接创建该类的实例,只能通过继承该类来实现子类实例,或者已经定义好的适配器视图的子类:列表视图、格类来实现子类实例,或者已经定义好的适配器视图的子类:列表视图、格子视图等等子视图等等46 3.1:视图组件(:视图组件(Views)2 2、常见视图组件:、常见视图组件:u适配器视图适配器视图(AdapterView)(AdapterView)适配器适配器是适配器视图和数据之间是适配器视图和数据之间的桥梁的桥梁,对适配器的介绍将结合,对适配器的介绍将结合具体的视图进行具体的视图进行适配器适配器是该视图和其所依赖的是该视图和其所
45、依赖的数据之间的桥梁。数据之间的桥梁。在在android.widgetandroid.widget包中定义包中定义适配器对象的继承关系如图所示:适配器对象的继承关系如图所示:47 3.1:视图组件(:视图组件(Views)2 2、常见视图组件:、常见视图组件:u列表视图列表视图( (ListViewListView) )列表视图以其简洁直观的界面效果和灵活的数据模型,赢得了开发人员的列表视图以其简洁直观的界面效果和灵活的数据模型,赢得了开发人员的青睐青睐。它以列表的形式展示具体内容,并且能够根据数据的长度自适应显它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。示。ListView
46、采用采用MVC模式将前端显示与后台数据进行分离:模式将前端显示与后台数据进行分离:数据获取需要一个数据获取需要一个Adapter对象对象48 3.1:视图组件(:视图组件(Views)u具体使用:具体使用:Xml定义如下所示:定义如下所示:Listview的定义,可以创建新的资源的定义,可以创建新的资源ID,也可以引用系统资源,也可以引用系统资源ID,l如果只有一个如果只有一个listview时,可以引用系统时,可以引用系统Listview的的ID注意:该注意:该idid的定义,必须引用系统资源中的定义,必须引用系统资源中IDID为为listlist组件,否则会报错组件,否则会报错:Cause
47、d by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is android.R.id.listl创建新的创建新的ID49 3.1:视图组件(:视图组件(Views)l相应的相应的Activity组件组件 Ch04_ListActDemop只有一个只有一个List时,可以使用时,可以使用ListActivity组件:注意与前面的只有一个组件:注意与前面的只有一个listview的布局定义保持一致()的布局定义保持一致()普通的Activity组件也可以显示列表视图组件,但是在对
48、列表视图所需的记录数据的管理方面存在问题:Activity组件必须自己去维护这些数据集,增加代码量,同时增加了操作与数据的耦合度。Android平台基于此种考虑,把列表视图和数据适配器组合在一起,封把列表视图和数据适配器组合在一起,封装成一个新的装成一个新的Activity组件组件ListActivity。其有默认的布局资源,也可以定制布局资源。注意必须包含一个注意必须包含一个ID为为list的列表视图,否则会的列表视图,否则会报错报错。p可以直接继承可以直接继承ListActivity,也可以继承,也可以继承Activity,然后在该子类中通,然后在该子类中通过列表适配器进行列表视图与数据的
49、绑定。过列表适配器进行列表视图与数据的绑定。50 3.1:视图组件(:视图组件(Views)u列表视图列表视图(ListView)(ListView)lAdapter适配器:提供数据给列表视图进行显示适配器:提供数据给列表视图进行显示51 3.1:视图组件(:视图组件(Views)u列表视图列表视图(ListView)(ListView)lAdapter适配器:继承关系适配器:继承关系52 3.1:视图组件(:视图组件(Views)lSimpleAdapter构造函数构造函数public SimpleAdapter (Context context, List? extends Map dat
50、a, int resource, String from, int to)参数参数:context 关联SimpleAdapter运行着的视图的上下文。data 一个Map的列表。在列表中的每个条目对应列表中的一行,应该包含所 有在from中指定的条目resource 一个定义列表项目的视图布局的资源唯一标识。布局文件将至少应 包含哪些在to中定义了的名称。from 一个将被添加到Map上关联每一个项目的列名称的列表to 应该在参数from显示列的视图。这些应该全是TextView。在列表中最初的 N视图是从参数from中最初的N列获取的值。53 3.1:视图组件(:视图组件(Views)lS
51、impleAdapter /创建列表数据适配器ListAdapter adapter = new SimpleAdapter(ListActAct.this,mItems, R.layout.row_ui, mColumnNames,mViewIds);ListActAct.this:适配器上下文:适配器上下文mItems:数组形式的记录集,可以得到展现的记录数:数组形式的记录集,可以得到展现的记录数R.layout.row_ui:列表视图的行视图资源:列表视图的行视图资源ID,定义每一行的布局,定义每一行的布局mColumnNames:每行数据的列名数组:每行数据的列名数组mViewIds:
52、显示每行数据的组件资源:显示每行数据的组件资源ID数组,定义哪列由哪一个组件显示数组,定义哪列由哪一个组件显示设置数据适配器,绑定数据设置数据适配器,绑定数据setListAdapter(adapter); 54 3.1:视图组件(:视图组件(Views)lArrayAdapterArrayAdapter(Context context, int textViewResourceId, List objects)ArrayAdapter aaData = new ArrayAdapter(this,android.R.layout.simple_list_item_1, data);This:
53、上下文:上下文ContextR.layout.simple_list_item_1:定义列表项模板:定义列表项模板Data:显示的数据:显示的数据设置数据适配器,绑定数据设置数据适配器,绑定数据setAdapter(adapter); 55 3.1:视图组件(:视图组件(Views)lSimpleCursorAdapter new SimpleCursorAdapter (Context context, int layout, Cursor c, String from, int to)参数解释参数解释:context .当前环境上下文。layout:要绑定的布局文件。c:从数据库返回的数据
54、,存放在Cursor中。from:对应要绑定的数据库中的字段名。to:对应要绑定的控件ID。56 3.1:视图组件(:视图组件(Views)注意注意:传入的传入的cursor必须要有必须要有“_id”这个字段,这个字段,Cursor会根据这个字段进行逐一会根据这个字段进行逐一的数据绑定,如果数据库中没有的数据绑定,如果数据库中没有“_id”,则利用,则利用SimpleCursorAdapter绑定绑定就会报错。就会报错。一定要以数据库作为数据源的时候一定要以数据库作为数据源的时候,才能使用才能使用SimpleCursorAdapter,这里特,这里特别需要注意的一点是:不要忘了在别需要注意的一
55、点是:不要忘了在AndroidManifest.xml文件中加入权限文件中加入权限57 3.1:视图组件(:视图组件(Views)u列表视图列表视图(ListView)(ListView)lsetContentView和和inflate区别:区别:setContentView()一旦调用, layout就会立刻显示UI;inflate只会把Layout形成一个以view类类对象的实例,有需要时再用setContentView(view)显示出来。一般在一般在activity中通过中通过setContentView()将界面显示出来,但是如果在非将界面显示出来,但是如果在非activity中如何
56、对控件布局设置操作了,这需中如何对控件布局设置操作了,这需LayoutInflater动态加载动态加载在程序中动态加载以上布局:在程序中动态加载以上布局:LayoutInflater flater = LayoutInflater.from(this);View view = flater.inflate(R.layout.example, null);获取布局中的控件。button = (Button) view.findViewById(R.id.button);textView = (TextView)view.findViewById(R.id.tview); 58 3.1:视图组件(
57、:视图组件(Views)lLayoutInflater:具体作用:1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。获得获得 LayoutInflater 实例的三种方式实例的三种方式1. LayoutInflater inflater = getLayoutInflater(); /调用调用ActivityActivity的的getLayoutInflater()getLayoutInflater()2. LayoutIn
58、flater localinflater = (LayoutInflater)context.getSystemServicecontext.getSystemService (Context.LAYOUT_INFLATER_SERVICE);3. LayoutInflater inflater = LayoutInflater.from(context); 59 3.1:视图组件(:视图组件(Views)lLayoutInflater.inflate()方法介绍:npublic View inflate (int resource, ViewGroup root):reSource:View
59、的layout的IDroot:如果提供root(不传不传null)时,返回值其实就是这个root,这个方法就是把xml解析成解析成view之后挂载这个之后挂载这个root下下。如果传null(不提供root),返回值是View,它就是当前它就是当前xml布局里面的布局里面的根节点根节点。60 3.1:视图组件(:视图组件(Views)u列表视图列表视图(ListView)(ListView)l设置列表视图的表头和表脚设置列表视图的表头和表脚this.getListView().addHeaderView(this.getLayoutInflater().inflate(R.layout.header_view, null), null, false); this.getListView().addFooterView(this.getLayoutInflater().inflate(R.layout.footer_view, null), null, false); 参数说明:参数说明:this.getLayoutInflater().inflate(R.layout.footer_view, null):通过Activity所关联的布局填充器来分别对表头和表脚布局资源定义进行填充而得到实例第
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冠梁及混凝土支撑体系模板拆除监理方案
- 2026四上语文中国神话传说阅读课件
- 人工智能与大模型应用实践
- 超宽带通信高精度信道状态估计
- 通知变更售后服务流程函4篇
- 生物医药创新研发-第1篇
- 碳中和绿色能源管理平台
- 市场预测报告及分析回复函5篇
- 快乐阅读时光:分享好书小学主题班会课件
- 网络安全工程师系统性能KPI绩效评定表
- GB/T 20118-2025钢丝绳通用技术条件
- 肿瘤科护理专业知识试题及答案
- 人教版数学六年级上册课内提升每日一练
- 信息安全实验指南
- 浙江杭州2020-2023年中考满分作文44篇
- 2024-2025学年湖北省武汉市洪山区五年级(下)期末数学试卷
- 江西鄱阳一中入学考试数学试卷
- 2025年GCP考试题库附参考答案ab卷
- 肝性脑病疑难病例讨论
- 急诊科脑梗死护理查房
- 骨科牵引的护理与观察
评论
0/150
提交评论