Andriod应用开发基础教程课件 第3章 常用控件与消息处理_第1页
Andriod应用开发基础教程课件 第3章 常用控件与消息处理_第2页
Andriod应用开发基础教程课件 第3章 常用控件与消息处理_第3页
Andriod应用开发基础教程课件 第3章 常用控件与消息处理_第4页
Andriod应用开发基础教程课件 第3章 常用控件与消息处理_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

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

文档简介

Andriod应用开发基础教程第3章常用控件与消息处理在Android开发中,控件是构建用户界面的基本元素,它们提供了与用户的交互方式。Android提供了多种控件,控件的添加有两种方法,第一种是在在布局文件的Design界面中有一个Palette面板,该面板中包含了Android中的大部分控件,拖动所需控件到应用界面即可,第二种是在布局文件编辑代码添加控件。表3-1常用控件列表控件分类控件列表文本类TextView、EditText按钮类Button、ImageButton、RadioButton、CheckBox、ToggleButton时间类DatePicker、TimePicker、CalendarView、AnalogClock布局类ConstraintLayout、LinearLayout、TableLayout、RelativeLayout、GridLayout、FrameLayout图片类ImageView、ImageButton进度类SeekBar、ProgressBar滚动条类HorizontalScrollView、ScrollView多媒体类VideoView、MediaController、SurfaceView菜单类OptionMenu、ContextMenu、PopupMenu对话框类AlertDialog、自定义Dialog表3-2控件通用属性属性属性值作用android:id@id/Name:使用已存在id@+id/Name:添加新的id设置控件idandroid:layout_widthandroid:layout_heightwrap_content:根据内容自适应大小match_parent:匹配父容器的大小具体像素值:如10dp定义控件的宽度和高度android:layout_gravitycenter_horizontal:水平居中center_vertical:垂直居中center:居中left、right:左部、右部top、bottom:上部、下部子控件在父容器内部对齐方式android:gravity同layout_gravity设置自身内部元素的对齐方式android:layout_marginandroid:padding具体像素值:如5dp设置控件的外边距和内边距android:backgroundrgb数值设置背景颜色android:visibilitytrue、false设置控件的可见性android:clickabletrue、false设置控件是否响应点击事件android:alpha0到1之间数值控件透明度设置3.1事件处理

在Android开发中,事件处理机制是用户交互界面的核心部分,Android通过事件处理机制,确保用户的点击、触摸、设备的屏幕旋转、按键操作等事件能够得到及时的响应和处理。对事件处理方式主要有两种:基于监听器的事件处理和基于回调的事件处理,事件处理的流程大致如下:1、用户与设备交互,如点击按钮、触摸屏幕等产生事件;2、事件源捕获到事件,并将事件传递给事件分发器(EventDispatcher);3、事件分发器根据事件的类型和事件源的类型,找到对应的事件监听器或回调函数;4、事件分发器调用事件监听器或回调函数中的相应方法,对事件进行处理;5、处理完成后,事件监听器或回调函数将处理结果返回给事件分发器;6、事件分发器将处理结果传递回事件源,并更新界面或执行其他操作。3.1.1基于监听的事件处理

基于监听器的事件处理是Android中最常用的事件处理方式,这种方式是通过在事件源上注册事件监听器来监听事件,当事件发生时,事件源会调用监听器中的相应方法,从而实现对事件的处理。事件监听处理主要涉及到3个对象:1、事件源(EventSource):产生事件的控件,如按钮、文本框等;2、事件(Event):由事件源产生的动作或状态变化,如点击事件、触摸事件、设备的屏幕旋转、按键操作等;3、事件监听器(EventListener):用于监听事件源产生的事件,并对事件进行处理的接口或类。基于监听接口的事件处理中需首先将事件监听器注册到事件源,当用户与设备交互时便会触发事件源上的事件生成事件对象,事件触发事件监听器,事件监听器再调用事件处理器处理相应事件事件监听器能处理的事件类型有单击事件、长按事件、焦点改变事件等,处理这些事件时事件监听器必须实现View类中的内部接口事件监听器处理事件类型实现接口接口需实现的方法单击事件View.OnClickListenerpublicvoidonClick(Viewv)长按事件View.OnLongClickListenerpublicbooleanonLongClick(Viewview)焦点改变事件View.onFocusChangeListenerpublicbooleanonFocusChange(Viewv,booleanhasFocus)按键事件View.OnKeyListenerpublicbooleanonKey(Viewv,intkeyCode,KeyEventkeyEvent)触摸事件View.OnTouchListenerpublicbooleanonTouch(Viewv,MotionEventmotionEvent)基于监听的事件处理方式中每个控件均可以针对特定的事件指定一个事件监听器,每个事件监听器也可以监听一个或多个事件源,因为同一个事件源上可能发生多种事件,不同事件可以交给不同的事件监听器来处理,同时也可以让一类事件都使用同一个事件监听器来处理。3.1.2基于回调的事件处理

所谓的回调函数是指在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调。基于回调的事件处理是另一种常见的事件处理方式,它通过在事件源上设置回调函数来监听事件,这种事件处理方式事件源与事件监听器是统一的,或者说没有事件监听器。当事件发生时,事件源会调用回调函数来处理事件。这种方式不如基于监听器的事件处理灵活和可扩展。表3-6Android系统提供的常用回调方法方法说明booleanonKeyDown(intkeyCode,KeyEventevent)用户在该控件上按下某个键时触发的方法booleanonKeyLongPress(intkeyCode,KeyEventevent)用户在该控件上长按某个键时触发的方法booleanonKeyShortcut(intkeyCode,KeyEventevent)当一个键盘快捷键事件发生时触发该方法booleanonKeyUp(intkeyCode,KeyEventevent)用户在该控件上松开某个键时触发的方法booleanonTouchEvent(MotionEventevent)用户在该控件上触发触摸事件触发的方法booleanonTrackballEvent(MotionEventevent)用户在该控件上触发触摸轨迹触发的方法booleanonFocusChanged(MotionEventevent)用户在该控件上焦点发生改变触发的方法3.2文本类控件3.2.1TextView

TextView意为文本框,向用户显示文本,并允许用户编辑文本,TextView是一个完整的文本编辑器,但基类被配置为不允许编辑。TextView类继承自View类,是View类的一个子类。TextView常用的一种控件,属性也是比较繁多的,可设置文字的字体大小、颜色、背景色、边距等基本样式。表3-7TextView常用属性表3-7TextView常用属性案例3.1

显示不同样式的TextView。(参考代码见:TextViewActivity)界面中显示了不同样式的TextView:带图片的、有阴影的、有超长文字的、单击可用默认浏览器打开网址的、没有文字显示提示信息的。案例3.2

为TextView添加单击事件监听器,点击TextView在应用屏幕上向用户显示一条TextView中的文本内容信息,一段时间后信息自动消失。(参考代码见:TextViewActivity)3.2.2EditText

EditText意为编辑框,EditText类继承自TextView,但允许用户改变其中的内容,属性和用法与TextView一致。表3-8EditText常用属性属性属性描述android:inputType设置文本输入类型:"none":未指定明确类型"text":输入普通字符"textCapCharacters":所有字母大写"textCapWords":单词首字母大写"textCapSentences":每句的第一个字母大写"textAutoCorrect":自动对文本进行纠正"textAutoComplete":自动完成文本"textMultiLine":多行输入"textImeMultiLine":输入法多行(不一定支持)"textNoSuggestions":不提示"textUri":URI格式"textEmailAddress":电子邮件地址格式"textEmailSubject":邮件主题格式"textShortMessage":短消息格式"textLongMessage":长消息格式"textPersonName":人名格式"textPostalAddress":邮政格式"textPassword":密码格式"textVisiblePassword":密码可见格式"textWebEditText":作为网页表单的文本格式"textFilter":文本筛选格式"textPhonetic":拼音输入格式"number":数字格式(不能输入小数点)"numberSigned":有符号数字格式"numberDecimal":可以带小数点的浮点格式(可输入小数点)"phone":拨号键盘"datetime":日期+时间格式"date":日期键盘"time":时间键盘android:selectAllOnFocus点击编辑框获得焦点后:true:选中编辑框中所有的文本内容false:将光标移动到文本的开始或者结尾android:singleLinetrue:限制EditText只允许单行输入,而且不会滚动false:多行输入显示android:cursorVisibletrue:显示光标false:不显示光标android:maxLength设置最大输入字符个数,再多了就输入不进去了android:focusable是否可获取焦点(为false时,软键盘永不弹出)android:imeOptions软键盘回车键/确认键显示功能:actionGo:去往,通常用于打开链接actionNext:下一步,通常用于跳转到下一个EditTextactionSend:发送,通常用于发送信息actionSearch:搜索,通常用于搜索信息actionDone:完成,通常表示事情做完了actionNone:未指定,编辑框右侧不带任何提示android:digits限制编辑框中只能输入自己定义的字符串,如果输入其它将不予以显示编辑框输入信息软小键盘的控制可通过在模块下的AndroidMinifest.xml<activity>标签设置属性windowSoftInputMode即可android:windowSoftInputMode可选属性值对软键盘作用如下:(1)stateUnspecified:软键盘的默认状态,EditText获取焦点的时候才会弹出;(2)stateUnchanged:软键盘将一直保持在上一个activity里的状态,无论是可见还是隐藏;(3)stateHidden:用户选择activity时,软键盘总是被隐藏;(4)stateAlwaysHidden:当Activity的主窗口有输入焦点时始终隐藏软键盘;(5)stateVisible:当Activity的主窗口有输入焦点时始终显示软键盘;(6)stateAlwaysVisible:Activity的主窗口有输入焦点时始终显示软键盘;(7)adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示,并且会调整布局进而使输入内容始终可见;(8)adjustResize:始终调整Activity主窗口的尺寸来为屏幕上的软键盘腾出空间,通常意味着窗口的内容会向上移动,以便为键盘腾出空间,实际上就是给根布局加Padding,padding的值就是软键盘的高度;(9)adjustPan:不调整Activity主窗口的尺寸来为软键盘腾出空间,而是自动平移窗口的内容,使当前焦点永远不被键盘遮盖,让用户始终都能看到其输入的内容。实际上就是布局整体向上滚动,上滚动的布局是根据当前焦点所在的位置确定的。(10)adjustNothing:Activity窗口不会做任何调整,窗口的内容也不会改变。案例3.3

使用TextView和EditText设计一个用户注册界面,用户名(用户名只能为中文或英文)和密码不为空时显示注册成功,否则显示提示信息。(参考代码见:EditTextActivity)android:inputType="textPersonName"android:inputType="date"android:inputType="textEmailAddress"android:inputType="phone"android:inputType="textPassword"用户名判断可用正则表达式://用正则表达式匹配输入的用户名,只能为英文或中文Stringregex="[[\\u4e00-\\u9fa5]|[a-zA-Z]]+";//匹配用户名的正则表达式Patternpattern=Ppile(regex);//编译正则表达式Matchermatcher=pattern.matcher(name);//创建匹配器3.3图片控件图片控件可以用ImageView实现,lmageView继承自View,是Android开发中最常用的控件之一,主要用于显示图片,也可以用于显示Drawable对象,ImageView既可以加载本地图片也可以加载资源目录下drawable、mipmap中的图片。表3-9ImageView常用属性属性属性描述android:src设置ImageView图片内容,区别android:background:android:background-设置背景样式,会根据ImageView给定的宽度来拉伸图片进行填充android:src-设置ImageView图片内容,是ImageView特有的一个属性,用来设置ImageView要展示的图片,不会对图片进行拉伸android:maxHeight设置ImageView的最大高度android:maxWidth设置ImageView的最大宽度android:adjustViewBounds设置在ImageView调整边界时是否保持图片的纵横比例,需要与android:maxWidth、android:MaxHeight一起使用,单独使用没有效果android:cropToPadding设置是否剪切图片以适应内边距的大小android:tint设置图片渲染颜色,单独设置时,会覆盖掉原有背景图片,需要与android:tintMode一起使用android:tintMode图像混合技术中用Sa、Da分别代表源图像和目标图像透明度,Sc、Dc分别代表源图像和目标图像的颜色值,在做图片颜色渲染时目标图像指图片,源图像指渲染颜色。android:tintMode属性设置图片渲染的混合模式,[]左侧表示输出的透明度值,右侧表示输出的颜色值。src_over:在目标图像的上方绘制源图像,[Sa+(1-Sa)*Da,Sc+(1-Sa)*Dc]src_in:只在源图像和目标图像相交的地方绘制目标图像,[Sa*Da,Sc*Da]src_atop:在目标图像和源图像相交的地方绘制源图像而在不相交的地方绘制目标图像,[Da,Sc*Da+(1-Sa)*Dc]multiply:混合,[Sa*Da,Sc*Dc]add:饱和度相加,[max(0,min(Sa+Da,1)),max(0,min(Sc+Dc,1))]screen:[Sa+Da-Sa*Da,Sc+Dc-Sc*Dc]android:scaleType设置是否改变图片比例以及超出部分如何裁剪:matrix:按照矩阵方式缩放,不调整图片大小,从左上角开始往右下角绘制,如果超出的

ImageView的范围则直接舍弃。不改比例、会裁剪fitXY:从横纵两个方向对图片进行缩放,以占满整个ImageView,改比例、不裁剪fitStart:将图片等比例缩放,直至能够完全显示,然后将图片至于ImageView的左上角。不改比例、不裁剪。fitCenter:和fitStart类似,只不过会将图片居中放置。不改比例、不裁剪。fitEnd:和fitStart类似,只不过会将图片放在ImageView的右下角。不改比例、不裁剪。center:直接将图片原封不动的放到ImageView中央,多余部分裁剪掉。不改比例、裁剪。centerCrop:等比例缩放图片,直至图片能够完全占满ImageView,占满之后多余部分会被裁剪掉。不改比例、裁剪。centerInside:保持原始比例的缩放图片,直至能够完整显示图片的内容。不改比例、不裁剪。案例3.4

图片颜色渲染不同模式演示,鼠标单击图片切换渲染模式(参考代码见:ImageViewTintActivity)案例3.5

演示android:scaleType属性值对ImageView加入图片效果影响(参考代码见:ImageViewscaleTypeActivity)鼠标单击图片即可改变android:scaleType属性值,使得图片在ImageView中有不同的呈现效果3.4按钮类控件3.4.1Button

Button类继承自TextView,所以Button能使用TextView的属性和方法,如设置按钮长宽度、背景颜色、显示的文本内容等,区别在于:1、Button拥有默认的按钮背景,而TextView默认无背景;2、Button的内部文本默认居中对齐,而TextView的内部文本默认靠左对齐;3、Button会默认将英文字母转为大写,而TextView保持原始的英文大小写;用户可通过在资源目录res下drawable创建xml文件自定义Button的样式,如圆角、渐变、大小、描边等等,首先依次选择res>drawable>新建>DrawableResourceFile,在弹出的NewDrawableResourceFile面板中Rootelement选择写入shape,Filename自定义xml文件创建好后,用户可以在<shape>标签中可通过android:shape属性定义Button的形状,<shape>标签下还可以继续添加子xml标签定义Button的其他样式表3-10标签可选属性作用标签名属性作用<shape>android:shape设置Button形状:rectangle:矩形oval:椭圆line:线ring:圆环<corners>android:radiusandroid:topLeftRadiusandroid:topRightRadiusandroid:bottomLeftRadiusandroid:bottomRightRadius设置圆角半径,属性值为整数<gradient>android:angle="integer"android:centerX="integer"android:centerY="integer"android:centerColor="integer"android:endColor="color"android:gradientRadius="integer"android:startColor="color"android:type=["linear"|"radial"|"sweep"]android:useLevel=["true"|"false"]设置渐变<padding>android:left="integer"android:top="integer"android:right="integer"android:bottom="integer"设置各方向间距<size>android:width="integer"android:height="integer"设置大小<stroke>android:width="integer"android:color="color"android:dashWidth="integer"android:dashGap="integer"设置描边<solid>android:color设置填充颜色注:为了避免主题样式对显示效果的影响,可修改模块下res资源目录中values目录下themes.xml文件:<stylename="Base.Theme.MyApplication"parent="Theme.Material3.DayNight.NoActionBar">为<stylename="Base.Theme.MyApplication"parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge">即可。案例3.6

自定义Button样式。(参考代码见:ButtonActivity)Button样式设置文件my_button.xml:1<?xmlversion="1.0"encoding="utf-8"?>2<shapexmlns:android="/apk/res/android"3android:shape="rectangle">4<!--矩形-->5<cornersandroid:radius="10dp"/><!--设置圆角半径-->6<gradient7android:centerColor="#7cfc00"8android:endColor="#4169e1"9android:startColor="#d3d3d3"10android:type="linear"/><!--设置渐变-->11<padding12android:top="2dp"13android:bottom="2dp"14android:left="2dp"15android:right="2dp"/><!--设置各方向间距-->16<size17android:width="100dp"18android:height="50dp"/><!--设置大小-->19<stroke20android:width="2dp"21android:color="#000000"/><!--设置描边-->22</shape>案例3.7

用Button演示基于监听事件处理中实现点击事件不同方式。(参考代码见:ButtonListenActivity)1、通过自定义内部实现:新建一个自定义类(MyClickListener)并实现View.OnClickListener接口,重写View.OnClickListener接口中的OnClick(Viewview)方法,给按钮(Button1)绑定一个监听器,并监听一个点击事件;2、通过匿名内部类实现:给按钮(Button2)绑定一个监听器,并监听一个点击事件,在setOnClickListener方法中直接传入一个OnClickListener对象,并实现OnClick(Viewview)方法;3、通过当前Activity实现:当前Activity(ButtonListenActivity)实现View.OnClickListener接口,在当前Activity中重写OnClick(Viewview)方法,给按钮(Button3)绑定一个监听器,并监听一个点击事件;4、在布局文件中绑定:给按钮控件(Button4、Button5)添加Android:onClick属性,在Activity中实现该属性值名称一致的方法,方法的访问修饰符必须是public且形参必须是View类型。不同按钮控件加Android:onClick属性相同,则两个控件可用同一个方法(myClick_listen)监听点击事件,只需要通过id判断是哪个控件发生点击事件,实现不同的处理效果即可。3.4.2ImageButton

ImageButton意为图片按钮,它也是一个Button,但Button既可显示文本也可显示图片,ImageButton只能显示图片不能显示文本,ImageButton继承自ImageView,拥有ImageView的所有属性,ImageButton通常用于需要显示一个具有点击功能的图片按钮的场景,如应用图标、菜单项等。案例3.8

演示ImageButton。(参考代码见:ImageButtonActivity)图片小于ImageButton控件时,图片放置于ImageButton控件空间中间,图片大于ImageButton控件时,会对图片进行剪裁使之适应控件大小,ImageButton控件能同时设置前景和背景。3.4.3ToggleButton

ToggleButton意为开关按钮,有选中(Checked)和未选中(Unchecked)两种状态,当用户单击ToggleButton时,它会在两种状态之间切换,不同的状态下可以显示不同的文本。ToggleButton类继承自CompoundButton,CompoundButton继承自Button,所以ToggleButton能使用Button的所有属性。属性作用android:checked设置开关按钮是否被选中android:textOn设置开关按钮未选中时显示的文本android:textOff设置开关按钮选中显示的文本表3-11ToggleButton常用属性案例3.9

ToggleButton监听按钮切换状态事件。(参考代码见:ToggleButtonActivity)点击界面中的开关按钮即可看见按钮不同状态时显示不同提示3.4.4CheckBox和RadioButton

CheckBox意为复选框,是一种常用的UI控件,用户可从多个选项中选择一个或多个选项,它提供了两个状态:选中和未选中,用户可以通过点击复选框来切换其状态。CheckBox继承自CompoundButton,CompoundButton继承自Button,CheckBox具有Button的所有属性。表3-11CheckBox常用属性属性作用android:checked设置复选框的选中状态android:text设置复选框旁边显示的文本内容android:id设置复选框的唯一标识符android:enabled设置复选框是否可用获得复选框选中的值,主要有两种方式:1、为每个CheckBox添加事件监听器setOnCheckedChangeListener;2、设置一个按钮,在点击后,对每个CheckBox的选择状态进行判断。RadioButton意为单选按钮,在Android应用开发中,允许用户在一个组中选择一个选项,同一组中的单选按钮有互斥效果。RadioButton需要配合RadioGroup一起使用,RadioGroup是一个容器控件,是LinearLayout的子类,RadioGroup可以包含一个或若干个RadioButton,保证了其中的RadioButton只能选择一个,即单选功能。RadioButton的父类也为Button,能使用Button的所有属性。案例3.10

使用CheckBox和RadioButton完成用户信息确认操作。(参考代码见:CheckRadioActivity)3.5进度条和拖动条3.5.1ProgressBar

ProgressBar意为进度条,用于显示任务的完成进度,如显示文件上传下载进度、音乐播放进度等,它通常以水平条或圆圈的形式展示。需要注意的是,进度更新过快或是在主线程中执行如文件下载类的耗时操作,ProgressBar会出现无法无法更新的情况,可以使用Handler来更新ProgressBar的进度视图,Handler说明和用法可以参考第十章相关小节。表3-13

ProgressBar常用属性属性作用android:progress设置进度条进度android:max设置进度条的最大值android:indeterminate设置进度条是否为不确定模式android:indeterminateTint设置进度条颜色android:indeterminateDrawable设置不确定模式的Drawableandroid:indeterminateBehavior定义进度达到最大值时不确定模式应如何表现android:indeterminateDuration设置不确定动画的持续时间android:interpolator设置不确定动画的加速度曲线style设置ProgressBar样式,模式默认样式是一个有缺口的圆环循环转动,水平进度条设置方式:style="?android:attr/progressBarStyleHorizontal"或style="@android:style/Widget.Material.ProgressBar.Horizontal"android:max设置进度条最大值android:min设置进度条最小值android:progressDrawable设置进度条的Drawableandroid:visibility设置进度条的可见性android:secondaryProgress定义二级进度值用户可以通过图层列表自定义ProgressBar样式,在模块资源路径中依次选择res>drawable>新建>DrawableResourceFile,在弹出的NewDrawableResourceFile面板中Rootelement选择写入layer-list,Filename自定义即可创建新的图层列表文件。图层列表文件根标签为<layer-list>,其下可放若干个<item>标签,每个<item>标签代表一个drawable层,可以设置不同的属性和样式,<item>一层层的叠加,后添加的会覆盖先添加的,实现多个drawable层的叠加效果。表3-15<item>可使用的属性属性作用android:drawable引用drawable资源android:id资源idandroid:topandroid:bottomandroid:leftandroid:right整型。设置上下左右顶部偏移(像素)案例3.11

自定义ProgressBar样式。(参考代码见:ProgressBarActivity)3.5.2SeekBarSeekBar意为拖动条,它是Android中的一个可滑动条控件,允许用户通过滑动来选择一个数值,通常用于音量控制、亮度调节、进度选择等场景。SeekBar类继承自ProgressBar,具有ProgressBar的所有属性表3-15

SeekBar常用属性属性作用android:max设置SeekBar的最大值android:progress设置SeekBar的当前进度值android:thumb设置滑块的图像,可以是一个Drawable资源android:thumbOffset设置滑块的偏移量android:progressDrawable设置SeekBar的Drawable案例3.12

SeekBar显示进度条进度(参考代码见:SeekBarActivity)拖动进度条即可查看进度条进度,开始拖动、停止拖动进度条也会有相应的消息提示3.6时间类控件3.6.1DatePickerDatePicker意为日期选择器,是一种Android平台上常用日期控件,用于让用户选择日期。它通常以日历的形式显示,并允许用户通过滑动或点击来选择年、月和日。DatePicker继承自Picker,Picker的父类为FrameLayout,DatePicker具有FrameLayout的所有属性。DatePicker选择好日期后可使用可用init(intyear,intmonthOfYear,intdayOfMonth,DatePicker.OnDateChangedListeneronDateChangedListener)设置初始化时间并添加日期改变监听器,当用户改变初始日期后获得选中的日期表3-16DatePicker常用属性和方法表3-16DatePicker常用属性和方法案例3.13

通过DatePicker获取选日期。(参考代码见:DateActivity)无论是滚动形式还是日历形式的DatePicker初始化时间都为2024年10月3日,改变日期TextView中将显示新的日期3.6.2TimePickerTimePicker意为时间选择器,用户可以通过滑动选择小时和分钟来设置时间,通常与DatePicker一起使用,设置时间和日期。TimePicker选择好时间后可使用setOnTimeChangedListener(TimePicker.OnTimeChangedListenerlistener)添加时间改变监听器,当用户改变时间后获得选中的时间。TimePicker继承自FrameLayout,具有FrameLayout的所有属性。表3-17TimePicker常用属性属性作用android:timePickerMode设置TimePicker的显示模式,"clock"(时钟)或"spinner"(滚动选择器)android:scaleXandroid:scaleY设置TimePicker的显示大小方法作用setHour(inthour)setMinute(intminute)设置TimePicker的小时和分钟getHour()getMinute()获取当前选择的小时和分钟setOnTimeChangedListener(TimePicker.OnTimeChangedListenerlistener)设置时间改变监听器案例3.14

通过TimePicker获取选择时间。(参考代码见:TimeActivity)无论是滚动形式还是时钟形式的TimePicker改变时间后TextView中将显示新的时间3.6.3AnalogClock和DigitalClockAnalogClock和DigitalClock分别为模式时钟和数字时钟,AnalogClock用于显示指针式时钟,仅有时针和分针两个指针,DigitalClock用来显示数字式时钟,显示格式为AM/PMHH:MM,AnalogClock继承自View,AnalogClock继承自TextView。表3-18AnalogClock可用属性属性作用android:dial设置AnalogClock背景图片android:hand_hour设置AnalogClock时针图片android:hand_minute设置AnalogClock分针图片案例3.15

通过AnalogClock和DigitalClock查看当前时间(参考代码见:AnalogDigitalClockActivity)1<?xmlversion="1.0"encoding="utf-8"?>2<LinearLayoutxmlns:android="/apk/res/android"3android:layout_width="match_parent"4android:layout_height="match_parent"5android:background="#a9a9a9"6android:orientation="vertical">7<DigitalClock8android:id="@+id/digitalClock"9android:layout_width="match_parent"10android:layout_height="wrap_content"11android:textSize="40sp"12android:gravity="center"13android:textColor="#dc143c"14android:background="#e6e6fa"/>15

16<AnalogClock17android:layout_width="match_parent"18android:layout_height="300dp"19android:dial="@drawable/clock_background"/>20

21</LinearLayout>3.6.4TextClockTextClock为文本时钟,是在Android4.2(API17)后推出的用来替代DigitalClock的一个控件,可以以字符串格式显示当前的日期和时间,并且可以根据系统的时区自动更新时间。它继承自TextView控件,可以使用TextView的所有属性和方法。表3-19TextClock常用属性属性作用android:format12Hour设置12时制的格式android:format24Hour设置24时制的格式android:timeZone设置时区格式化字符串中可以使用以下占位符来表示时间和日期:h-小时(12小时制),H-小时(24小时制),m-分钟,s-秒,z-时区,E-星期几的缩写,EEE-星期几的全称,d-日,MMM-月份的缩写,MMMM-月份的全称,yy-年份的后两位,yyyy-完整年份。设置时区可采用世界时加减时间的方式,如东八区设置时区android:timeZone=”GMT+8:00”。案例3.16

通过TextClock查看时间日期。(参考代码见:TextClockActivity)第一行显示本地东八区12时制的时间日期,第二行显示东九区24时制的时间日期1<?xmlversion="1.0"encoding="utf-8"?>2<LinearLayoutxmlns:android="/apk/res/android"3android:layout_width="match_parent"4android:layout_height="match_parent"5android:orientation="vertical"6android:background="#a9a9a9">7

8<TextClock9android:id="@+id/MyTextClock"10android:layout_width="match_parent"11android:layout_height="wrap_content"12android:textColor="#b22222"13android:format12Hour="yyyy/MM/ddhh:mm:ssaaE"14android:textSize="35dp"/>15<TextClock16android:layout_width="match_parent"17android:layout_height="wrap_content"18android:textColor="#b22222"19android:textSize="35dp"20android:format24Hour="yyyy-MM-ddHH:mm:ssEEEE"21android:timeZone="GMT+9:00"/>22

23</LinearLayout>3.7菜单类控件菜单是Android应用中非常重要且常见的组成部分,可以增加更多的功能而不占用屏幕的空间,使用户能够更加高效地管理和操作应用程序及其内容。‌主要可以分为三类:选项菜单(OptionMenu)、上下文菜单(ContextMenu)以及弹出菜单(PopupMenu)。使用XML和Java代码都可以创建Menu,但是在实际开发中,往往通过XML文件定义Menu,因为使用XML创建Menu不仅可以显示更清晰的菜单结构还可以让菜单内容与应用的逻辑代码分离。定义Menu之前,需要在本模块res资源目录文件夹下新建menu文件夹用于存储与Menu相关的所有XML文件,步骤如下:1、res右键>新建>AndroidResourceDirectory,在弹出的NewResourceDirectory面板中,Resourcetype下拉选择menu,Directoryname为默认填入的menu即可2、选中新创建的menu目录右键>新建>MenuResourceFile,填入文件名即可创建菜单资源文件,通过创建XML标签对Menu进行定义。菜单资源资源文件(MenuResourceFile)是一个以<menu>作为根标签的XML文件,可以使用<menu>、<item>、<group>三种XML标签定义Menu,<menu>标签下能包含若干个<item>和<group>标签,<item>用于定义菜单项,每一个<item>标签代表Menu中的一个选项,在<item>中可以嵌套定义<menu>标签来创建一个子菜单,<group>用来将多个<item>标签进行分组让它们共享一些属性。<item>用于定义菜单项属性,<group>用于定义菜单组属性。表3-20<item>和<group>常用属性属性作用<item>android:icon定义菜单项图标android:title定义菜单项标题android:titleCondensed菜单项的短标题,当菜单项标题太长时会显示该属性值android:id定义菜单项唯一标识符android:showAsAction指定菜单项的显示方式never:从不在导航栏上显示,一直放在溢出菜单列表中always:总是在导航栏上显示菜单图标ifRoom:如果导航栏右侧有空间,该项就直接显示在导航栏上,不再放入溢出菜单withText:如果能在导航栏上显示,除了显示图标还要显示该项的文字说明collapseActionView:操作视图要折叠为一个按钮,点击该按钮再展示操作视图android:alphabeticShortcut为菜单项指定字符快捷键android:alphabeticModifiers字符快捷键的修饰符,默认为Controlandroid:numericShortcut为菜单项指定数字快捷键android:onClick单击此菜单项时要调用的方法android:enable定义菜单项是否可用android:checkable定义菜单项是否可选android:check定义菜单项是否已选中android:visible定义菜单项是否可见<group>android:id定义菜单组唯一标识符android:heckableBehavior定义菜单组选择行为:none:不可选all:多选single:单选android:menuCategory为指定菜单组进行分类,指定优先级。3.7.1OptionMenuOptionMenu意为选项菜单,是最常用的Menu,可以直接通过Android的“菜单键”唤出,通常直接为当前Activity服务。在高版本的Android系统上是从右上角弹出,可以在里面放置一些常用的功能入口或者设置对应用产生全局影响的操作等。表3-21选项菜单常使用的方法方法作用publicbooleanonCreateOptionsMenu(Menumenu)初始化Activity选项菜单,将要设置的菜单项关联到Menu中publicbooleanonOptionsItemSelected(MenuItemitem)选项菜单被选中时触发,完成事件处理publicvoidonOptionsMenuClosed(Menumenu)选项菜单关闭时调用此方法publicbooleanonPrepareOptionsMenu(Menumenu)选项菜单显示前调用此方法,可在这里进行菜单的调整publicbooleanonMenuOpened(intfeatureId,Menumenu)选项菜单打开以后会调用此方法先前的案例为了界面简洁,未设置有ActionBar(操作栏)的主题样式,可修改本模块下res资源目录中values目录下themes.xml文件从先前设置的:<stylename="Base.Theme.MyApplication"parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge">为<stylename="Base.Theme.App"parent="Theme.MaterialComponents.DayNight.Bridge">,这样Activity加载布局文件后界面上部会显示操作栏,选项菜单位于操作栏内部。案例3.17

制作选项菜单(参考代码见:OptionMenuActivity)打开界面溢出菜单列表打开子菜单3.7.2ContextMenuContextMenu为上下文菜单,需要绑定在一个控件之上,长按这个控件的时候就会出现一个悬浮窗式的菜单,通常用于设置某个控件的属性或内容表3-22上下文菜单常使用的方法方法作用publicvoidonCreateContextMenu(ContextMenumenu,Viewv,ContextMenu.ContextMenuInfomenuInfo)初始化上下文菜单,将要设置的菜单项关联到控件上publicbooleanonContextItemSelected(MenuItemitem)上下文菜单被选中时触发,完成事件处理publicvoidonContextMenuClosed(Menumenu)上下文菜单关闭时调用此方法publicvoidregisterForContextMenu(Viewview)注册上下文菜单上下文菜单的使用步骤和选项菜单类似,需要先在menu目录编写菜单资源文件定义上下文菜单,然后重写onCreateContextMenu()方法,由于长按某个控件才会弹出上下文菜单,还需要用registerForContextMenu()为控件注册上下文菜单,菜单项绑定监听事件可通过调用onContextItemSelected()来完成。案例3.18

使用上下文菜单改变文本颜色。(参考代码见:ContextMenuActivity)长按界面中的“改变颜色”按钮即可弹出上下文菜单,点击上下文菜单中的菜单项即可改变“Android开发”文本颜色3.7.3PopupMenuPopupMenu为弹出菜单,它也需要绑定到一个控件上面,然后会以一个竖直列表的形式弹出一个显示在对应控件的上方或下方显示一系列操作选项的悬浮窗,它适用于提供与特定内容相关的大量操作。表3-23弹出菜单常使用的方法方法作用publicMenuInflatergetMenuInflater()取得MenuInflater类的对象publicabstractMenuItemsetOnMenuItemClickListener(MenuItem.OnMenuItemClickListenermenuItemClickListener)设置菜单项的监听操作弹出菜单与上下文菜单类似,但两者的使用方式不同。使用弹出菜单需要创建PopupMenu对象,传入当前Application的上下文对象和待绑定的控件,然后调用getMenuInflater()获取MenuInflater对象,通过它将菜单资源装载入PopupMenu的Menu实例中,最后调用PopupMenu对象的show()方法即可显示弹出菜单,弹出菜单项绑定点击事件监听器可通过调用setOnMenuItemclickListener()来完成。案例3.19

使用弹出菜单,提示选择菜单项(参考代码见:PopupMenuActivity)点击界面按钮即可显示弹出菜单,选择弹出菜单中的菜单项应用界面显示提示信息3.8对话框控件对话框作用是提示用户或输入更多信息,对话框一般未填满整个屏幕,通常用于要求用户先进行输入、选择等操作然后继续执行后续操作。Dialog类是对话框的父类,但不要将Dialog直接实例化,而应将其子类AlertDialog(可显示标题、最多三个按钮、可选项目列表或自定义布局的对话框)、DatePickerDialog或TimePickerDialog(一个对话框,带有可让用户选择日期或时间的预定义界面)实例化。3.8.1AlertDialogAlertDialog使用基本流程可分为以下几步:1、创建AlertDialog.Builder实例对象;2、配置对话框:设置图标、设置标题、设置对话框内容等等;3、设置按钮:确认、取消、中立按钮;4、创建并显示对话框;表3-24AlertDialog.Builder常用方法方法作用href="#setTitle(java.lang.CharSequence)"setTitle(CharSequencetitle)设置标题setIcon(Drawableicon)设置图标setMessage(CharSequencemessage)设置对话框显示信息setItems(CharSequence[]items,DialogInterface.OnClickListenerlistener)设置在对话框中显示的项目列表href="#setView(android.view.View)"setView(Viewview)设置自定义的对话框样式setPositiveButton(CharSequencetext,DialogInterface.OnClickListenerlistener)设置点击确定按钮处理事件setNegativeButton(CharSequencetext,DialogInterface.OnClickListenerlistener)设置点击取消按钮处理事件setNeutralButton(CharSequencetext,DialogInterface.OnClickListenerlistener)设置点击中立按钮处理事件setSingleChoiceItems(CharSequence[]items,intcheckedItem,DialogInterface.OnClickListenerlistener)设置AlertDialog单选框setMultiChoiceItems(CharSequence[]items,intcheckedItem,DialogInterface.OnClickListenerlistener)设置AlertDialog多选框show()显示AlertDialog对话框create()创建AlertDialog对话框案例3.20

创建一个简单的对话框(参考代码见:AlertDialogSimpleActivity)10//为Button添加点击事件监听器11button.setOnClickListener(newView.OnClickListener(){12@Override13publicvoidonClick(Viewview){14//1、创建AlertDialog.Builder实例对象15AlertDialog.BuilderdialogBuilder=newAlertDialog.Builder(AlertDialogSimpleActivity.this);16//2、配置对话框:设置图标、设置标题、设置对话框内容17dialogBuilder.setTitle("提示");//标题18dialogBuilder.setIcon(R.drawable.ic_search);//图标19dialogBuilder.setMessage("确定要关闭此窗口吗?");//对话框内容20//3、设置按钮21dialogBuilder.setPositiveButton("确定",newDialogInterface.OnClickListener(){22@Override23publicvoidonClick(DialogInterfacedialogInterface,inti){24finish();25}26});//确定按钮退出本界面27dialogBuilder.setNegativeButton("取消",newDialogInterface.OnClickListener(){28@Override29

温馨提示

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

评论

0/150

提交评论