第四章Android常用高级控件本章目标:掌握自动完成文本框控件掌握滚动视图和列表视图掌握滑块和进度条掌握画廊控件和消息提示掌握下拉列表和选项卡4.1自动完成文本框所谓“自动完成”就是在文本框中输入文字信息时,会显示与之相似的关键字让你来选择。AutoCompleteTextView类继承自EditView类,位于android.widget包下。自动完成文本框控件的外观与图片文本框几乎相同,只是当用户输入某些文字信息时,会自动出现下拉菜单显示与用户输入文字相关的信息,用户直接点击需要的文字便可自动填写到文本控件中。自动完成文本框可以在XML文件中使用属性进行设置,也可以在Java代码中通过方法进行设置。4.1自动完成文本框表4-1自动完成文本的属性与方法对照表属性名称对应方法属性说明android:completionThresholdsetThreshold(int)定义需要用户输入的字符数android:dropDownHeightsetDropDownHeight(int)设置下拉菜单高度android:dropDownWidthsetDropDownWidth(int)设置下拉菜单宽度android:popupBackgroundsetDropDownBackgroundResource(int)设置下拉菜单背景4.1自动完成文本框ListAdapter继承与Adapter,它是ListVIew和其里边数据的适配器。ArrayAdapter是ListAdapter的一个直接子类,可以翻译成数组适配器,它是一个数组和ListView之间的桥梁,可以将数组里面定义的数据一一对应显示在ListView里面。ArrayAdapter是由3个参数进行构造的,第一个参数表示上下文的应用,为当前应用实例;第二个参数为一个在R文件里面定义的Layout,可以通过R.layout.XX访问(XX为资源的名称),也可以通过Android.R.layout.XX来进行对Android系统的默认布局进行访问,Android的默认布局有很多种,我们常见的有:android.R.layout.simple_list_item_single_choice:每一项只有一个TextView,但这一项可以被选择android.R.layout.simple_list_item_1:每一项只有一个TextViewandroid.R.layout.simple_list_item_2:每一项有两个TextView;第三个参数为字符串数组。4.2.1滚动视图滚动视图ScrollView类继承自FrameLayout类,因此,实际上它是一个帧布局,同样位于android.widget包下。ScrollView控件是当需要显示的信息在一个屏幕内显示不下时,在屏幕上会自动生成一个滚动条,以达到用户可以对其进行滚动,显示更多信息的目的。ScrollView控件的使用与普通布局没有太大的区别,可以在XML文件中进行配置,也可以通过Java代码进行设置。在ScrollView控件中可以添加任意满足条件的控件,当一个屏幕显示不下其中所包含的信息时,便会自动添加滚动功能。需要注意的是:ScrollView中同一时刻只能包含1个View。4.2.2列表视图Listview类位于android.widget包下,是一种列表视图,将ListAdapter所提供的各个控件显示在一个垂直且可滚动的列表中。该类的使用方法非常简单,只需先初始化所需要的数据,然后创建适配器并将其设置给ListView,ListView便将信息以列表的形式显示到页面中。SimpleAdapter和我们前面所说的ArrayAdapter一样,也是ListAdapter的直接子类。前面学习的ListView与ArrayAdapter绑定的列表有一定的局限性,这种绑定里面,ListView里面的每一项只有一个TextView,并且TextView里边的内容都是调用了数组里面每一个对象的toString()方法生成的字符串。而SimpleAdapter与ListView的绑定生成的列表就会有很大的用户可定制性。通常将ListView中某项的布局信息写在一个XML的布局文件中,这个布局文件通过R.layout.XX(XX为文件的名称)获得。4.2.2列表视图ArrayAdapter的作用是数组和ListView间的桥梁,而SimpleAdapter的作用是ArrayList和ListView的桥梁。需要注意的是,这个ArrayList里边的每一项都是一个MapString,?类型,ArrayList当中的每一项Map对象都和ListView当中的一项进行数据绑定和一一对应。SimpleAdapter类的构造方法结构如下:PublicSimpleAdapter(Contextcontext,List?ExtendsMapString,?data,intresource,String[]from,int[]to);Context参数:负责上下文应用的传递;Data参数:基于Map的List,Data里面的每一项都和ListView里面的每一项对应,Data里面的每一项是一个Map类型,这个Map类里边包含了ListView每一行需要的数据。比较常用的用法是:data=newArrayListMapString,Object();Resource参数:这个Resource就是一个Layout,这个Layout最起码要包含在to中出现的那些View。一般用系统提供的就可以了,当然也可以自己定义。Form参数:是一个名字的数组,每一个名字是为了在ArrayList中的每一个item中索引MapString,Object的Object用的。To参数:是一个TextView的数组,这些TextView是以id的形式来表示的,如Android.R.id.text1,这个text1在layout当中是可以索引到的。4.3滑块与进度条滑块类似于声音控制条,主要完成与用户的简单交互,而进度条则是需要长时间加载某些资源时用户显示加载进度的控件。ProgressBar类同样位于android.widget包下,但其继承自View,主要用于显示一些操作的进度。应用程序可以修改其长度表示当前后台操作的完成情况。因为进度条会移动,所以长时间加载某些资源或者执行某些耗时的操作时,不会使用户界面失去响应。ProgressBar类的使用非常简单,只需将其显示到前台,然后启动一个后台线程定时更改表示进度的数值即可。SeekBar继承自ProgressBar,是用来接收用户输入的控件。SeekBar类似于拖动条,可以直观地显示用户需要的数据,常用于声音调节等场合。SeekBar不但可以直观地显示数值的大小,还可以为其设置标度,类似于显示在屏幕中的一把尺子。RatingBar是另一种滑块控件,一般用于星级评分的场合,其位于android.widget包下,外观是5个星星,可以通过拖动来改变进度,除图片形式外,还有较小的以及较大的两种表现形式。4.4.1画廊控件画廊控件(Gallery)是Android中一种较为常见的高级控件,其效果酷炫且使用方式简单,是设计相册或者图片选择器的首选控件。Gallery是一种水平滚动的列表,一般情况下用来显示图片等资源,可以使图片在屏幕上滑来滑去。Gallery所显示的图片资源同样来自适配器。Gallery是View的子类,Gallery控件可以在XML布局文件中配置,也可以通过java代码直接操控。4.4.1画廊控件表4-2Gallery的常用属性和方法表属性名称对应方法说明android:animationDurationsetAnimationDuration(int)设置动画过渡时间android:gravitysetGravity(int)在父控件中的对齐方式android:unselectedAlphasetUnselectedAlphafloat()设置选中图片的透明度android:spacingsetSpacing(int)图片之间的空白大小4.4.2Toast的使用Toast向用户提供比较快速的即时消息,当Toast被显示时,虽然其悬浮于应用程序的最上方,但是Toast从不获取焦点。Toast对象的创建是通过Toast类的静态方法makeText来实现的,该方法有两个重载实现,主要的不同时一个接收字符串,而另一个接收字符串的资源标识符作为参数。Toast对象创建好之后,调用show()方法即可将其消息提示显示在屏幕上。一般来讲,Toast只显示比较简短的文本信息,但也可以显示图片。4.4.3Notification的使用Notification是另外一种消息提示的方式。Notification位于手机的状态栏(StatusBar),状态栏位于手机屏幕的最上层,通常显示电池电量、信号强度等信息,在Android手机中,用手指按下状态栏并往下拉可以打开状态栏查看系统的提示消息。在应用程序中可以开发自己的Notification并将其添加到系统的状态栏中,我们下面通过一个案例来具体理解Notification的使用方法。4.5.1下拉列表控件下拉列表控件(Spinner)是最常用的高级控件之一,一般用来从多个选项中选择一个需要的,例如出生日期的选择、居住城市的选择等。Spinner控件位于android.widget包下,是View类的一个子类。每次只显示用户选中的元素,当用户再次点击时,会出现选择列表供用户选择,而选择列表中的元素同样来自适配器。需要注意的是,Android中的下拉列表并不象其他系统中直接下拉显示选项,而是相当于弹出菜单供用户选择。4.5.2选项卡选项卡(TabHost)类位于android.widget包下,是选项卡的封装类,用于创建选项卡窗口。TabHost类继承自FrameLayout,是帧布局的一种,其中可以包含多个布局,用户可以根据自己的选择显示不同的界面。表4-3选项卡(TabHost)常用方法表方法名称方法说明addTab(TabHost.TabSpectabSpec)添加一项Tab页clearAllTabs()清除所有与之相关联的Tab页getCurrentTab()返回当前Tab页getTabContentView()返回包含内容的FrameLayoutnewTabSpec(Stringtag)返回一个与之关联的新的TabSpec谢谢!