Android常用的UI组件

  近来读完《疯狂Android讲义》一书,将其中的案例都码了一遍,很是感慨。很厚的一本书,就像一本字典,涵盖了大部分的android基础知识。现对里面一些比较不错的内容做出总结。本篇对书中android界面编程这章所涉及的常用UI组件做出总结,只做总结,不码代码。


第1组UI组件:布局管理器:

所有布局管理器都是ViewGroup的子类,都可作为容器类使用,因其继承View,所以可嵌套

五大布局:线性、表格、帧布局、相对、网格、绝对布局

         单位:边边:dp, 字体:sp


第2组UI组件:TextView及其子类

2.1文本框(TextView)与编辑框(EditView)的功能和用法

         TextView:不可编辑,

         EditView:可编辑

2.2 Button:点击触发一个onClick事件

         |--RadioButton:单选按钮,通常与RadioGroup一起使用

         |--CheckBox:复选按钮

         |--ToggleButton:状态开关按钮

         |--Switch:开关       

从功能上看,后3者很相似,它们都可以提供两种状态,其中ToggleButton、Switch通常用于切换程序中的某种状态。

2.3 时钟(AnalogClock 和 TextClock 的功能与用法)

TextClock:取代早起的DigitalClock组件,能以24/12 小时制来显示时间,数字。

AnalogClock:继承View组件,它重写了View的OnDraw方法,它会在View上绘制模拟时钟

2.4计时器(Chronometer):可用于倒计时

 

第3组UI组件:ImageView及其子类

ImageView继承自View、主要功能用于显示图片。

         |--ImageButton:图片按钮

         |--QuickContactBadge:显示关联到特定联系人的图片

         |--ZoomButton:代表”放大”、”缩小”两个按钮


第4组UI组件:AdapterView及子类

AdapterView:本身是一个抽象基类,继承了ViewGroup,它的本质是容器。

         |--AbsListView

                   |--ListView

         |--AbsSpinner

                   |--Spinner

                   |--Gallery

         |--AdapterViewAnimator

 

4.1列表视图(ListView)和ListActivity

ListView:常见组件,它以垂直列表的形式显示所有列表项

生成方式有如下两种:

         1、直接使用ListView进行创建

         2、让Activity继承ListActivity(相当于该Activity显示的组件为ListView)

一旦在程序中获得了ListView之后,接下来就需要为ListView设置它要显示的列表项了。在这一点上,ListView显示出AdapterView的特征:通过setAdapter(Adapter)方法为之提供Adapter,并由Adapter提供列表项即可。

ListView、GridView、Spinner、Gallery等AdapterView都只是容器,而Adapter负责提供每个   

”列表项”组件,AdapterView则负责采用合适的方式显示这些列表。

4.2 Apdater接口及实现类

Adapter常用实现类:

1、ArrayAdapter:简单、易用的Adapter,通常用于将数据或List集合的多个值包装成多个列表项

2、SimpleAdapater:并不简单、功能强大的Adapter,可用于将List集合的多个对象包装成多个列表项

3、SimpleCursorAdapter:与SimpleAdapter基本相似,只是用于包装Cursor提供的数据

4、BaseAdapter:通常用于被扩展。扩展BaseAdapter可以对各列表项进行最大限度的定制。以上三种Adapater皆继承于它

 

4种Adapter实例:

1,ArrayAdapter

New ArrayAdapter(Context context, //Context:上下文,即所在的Activity
         int resource,     //Resource:布局样式,一般为TextView
         int textViewResourceId);   //textViewResourceId:数据源,可为自定义的String数据


2.  SimpleAdapter:最大难点在于有5个参数

new SimpleAdapter(Context context,

                       List> data, //集合中每个Map(String,Object)作为列表选项

                      int resource,     //指定界面布局的id

                       String[] from,   //该参数决定map对象中哪些key对应的value来生成列表项 

                       int[] to);       //该参数决定填充哪些组件

3.BaseAdapter,用于扩写,需重如下4个方法

       1.getCount():该方法返回值用于控制Adapter会包含多少个列表项

       2.getItem(int position):该方法的返回值决定第position处的列表项的内容

       3.getItemId(int position):该方法的返回值决定第position处的列表项的ID

       4.getView(int position,ViewconverView,ViewGroup parent):该方法的返回值决定第position处的列项组件

上面4个方法最重要的是第1个和第4个

 

4.3 自动完成文本框(AutoCompleteTextView)的功能和用法

AutoCompleteTextView由Editext派生而出,实际上它也是一个编辑框,但它比普通编辑框多了一个功能:当用户输入一定字符之后,自动完成文本框会显示一个下拉菜单,供用户从中选择。

 

4.4 网格视图(GridView)的功能和用法

GridView用于在界面上按行、列分布的方式来显示多个组件。

与ListView有共同的父类:AdbListView

与ListView唯一的区别:ListView只显示一列,它可以显示多列


4.5 可展开的列表组件(ExpandableListView)

ExpandableListView是ListView的子类,它在普通ListView的基础上进行了扩展,把应用中的列表项分为机组,每组里面又可包含多个列表项

 

4.6 Spinner的功能与用法,可加适配器

列表选择框:相当于多选菜单

与Gallery都继承了AbsPinner,区别:Spinner只供用户选择,Gallery允许用户通过拖动来查看上一个、下一个列表项

 

4.7 AdapterViewFlipper的功能与用法

AdapterViewFlipper继承了AdapterViewAnimator,它也会显示adapter提供的多个View组件,但它每次只能显示一个View组件,程序可通过showPrevious()、showNext()方法控制该组件的上一个、下一个组件

 

4.8 StackView的功能与用法

StackView也是AdapterViewAnimator的子类,它也用于显示Adapter提供的一系列View。StackView将会以 “堆叠(Stack)”的方式来显示多个列表项。

 

第5组UI组件:ProgressBar及其子类

ProgressBar也是一组重要的组件,ProgressBar本身代表了进度条组件,它还派生了两个常用的组件:SeekBar 和RatingBar。

5.1 进度条(ProgressBar)的功能和用法

         进度条通常用于向用户显示某个耗时操作完成的百分比。进度条可以动态地显示进度,因此避免长时间地执行某个耗时操作时,让用户感觉程序失去了响应,从而更好地提高用户界面的友好性

 

5.2 拖动条(SeekBar)的功能与用法

         拖动条和进度条非常相似,只是进度条采用颜色填充来表明进度完成的程度,而拖动条则拖过滑块的位置来标识数值------而且拖动条允许用户拖动滑块来改变值,因此拖动条通常用于对系统的某种数值进行调节,比如调节音量等。

         拖动条继承于进度条。

 

5.3 星级评分条(RatingBar)的功能与用法

         星级评分条与拖动条有相同的父类:AbsSeekBar,因此它们十分相似:它们都允许用户通过拖动来改变进度,RatingBar与SeekBar最大的区别在于:RatingBar通过星星来表示进度。

 

第6组UI组件:ViewAnimator及其子类

ViewAnimator是一个基类,它继承了FrameLayout,因此它表示出FrameLayout可以将多个View”叠”在一起。ViewAnimator额外增加的功能正如它的名字所暗示的,可以在View切换时表现出动画效果

         FrameLayout

                   |--ViewAnimator

                            |--ViewSwitcher

                                     |--ImageSwitcher

                                     |--TextSwitcher

                            |--ViewFlipper

图像切换器(ImageView)与ImageView的功能有点相似,它们都可用于显示图片,区别在于ImageSwitcher的效果更炫,它可以指定图片切换时的动画效果。使用时需要创建一个ViewFactory对象

 

文本切换器(TextView)继承了ViewSwitcher,因此它具有与ViewSwitcher相同的特征:可以在切换View时使用动画效果。与ImageView相似的是,使用TextSwitcher也徐璈设置一个ViewFactory。。与ImageSwitcher不同的是,TextSwitcher所需的ViewFactory的makeView()

方法必须返回一个TextView组件

 

ViewFlipper组件继承了ViewAnimator,它可以调用addView(Viewv)添加多个组件,一旦向ViewFlipper中添加多个组件之后,ViewFlipper就可以使用动画控制多个组件之间的切换效果。

ViewFlipper与前面介绍的AdapterViewFlipper有较大的相似性,它们可以控制组件切换的动画效果。它们的区别是:ViewFlipper需要开发者通过addView(View v)添加多个View,而AdapterViewFlipper则只要传入一个Adapter,Adapter将会负责提供多个View。因此,ViewFlipper可以指定与AdapterViewFlipper相同的xml属性

 

第7组UI组件:对话框

     四种常用的对话框

1.AlertDialog:功能最丰富、实际应用最广的对话框

2.ProgressDialog:进度条对话框、这个对话框只是对进度条的包装

3.DatePickerDialog:日期选择对话框,这个对话框只是对DatePicker的包装

4.TimePickerDialog:时间选择对话框,这个对话框只是对TimePicker的包装。

         上面4中对话框功能最强、用法最灵活的就是AlertDIalog,因此应用也非常广泛,而其他三种对话框都是它的子类。

 

7.1使用AlertDialog创建对话框

AlertDialog生成的对话框可分为4个区域:

                                                                         图片区    标题区    内容区    按钮区

实现对话框的创建步骤:

       1.创建AlertDialog.Builder 对象

       2.调用AlertDialog.Builder的setTitle() 或 setCustomTitle()方法设置标题

       3.调用AlertDialog.builder 的 setIcon() 方法设置图标

       4.调用AlertDialog.builder 的相关设置方法设置对话框内容

       5.调用AlertDialog.builder 的 setPositiveButton()、setNegativeButton() 或 setNeutralButton() 方法添加按钮

       6.调用AlderDialog.Builder 的 create() 方法创建AldertDialog 对象,再调用AlertDialog 对象的 show() 方法将该对话框显示出来


几种不同风格的对话框:调用AlderDialog.Builder 相关方法

    1.实现列表项对话框:调用setItems()方法

    2.实现单选列表对话框:调用setSingleChoiceItems()

    3.实现多选列表项对话框:调用 setMultiChoiceItem()

    4.实现自定义列表项对话框:调用 setAdaper() 方法,

    5.实现自定义View对话框:调用setView()方法可以接收一个View组件,该View组件将会作为对话框的内容,如做一个对话框的登陆界面等。

 

7.2 对话框风格的窗口

这种对话框本质上依然是窗口,只是把显示窗口的Activity 的风格在manifest.xml里面设置为对话框风格

 

7.3 使用PopupWindow

         PopupWindow可以创建类似对话框风格的窗口,使用PopupWindow创建对话框风格的窗口只要如下两步即可

调用PopupWindow 的构造器创建PopupWindow 对象

调用PopupWindow 的showAsDropDown(view v)将PopupWindow作为v 组件的下拉组件显示出来;或调用PopupWindow的showAtLocation()方法将PopupWindow在指定位置显示出来

 

7.4使用DatePicker、TimePicker

DatePicker 和 TimePicker 的功能比较简单,用法也简单,只要如下两步即可:

通过new关键字创建DatePicker、TimePicker实例,调用它们的show()方法即可将日期选择对话框、时间选择对话框显示出来

         为DatePicker、TimePicker绑定监听器,这样可以保证用户通过DatePicker、TimePicker设置事件时触发监听器,从而通过监听器来获取获取个户设置的时间

 

7.5 使用ProgressDialog 创建进度对话框

         ProgressDialog代表了进度对话框,程序只要创建ProgressDialog 实例,并为它显示出来就是一个进度对话框。使用ProgressDialog创建进度对话框有如下两种方式:

如果只是设置简单的进度对话框,那么调用ProgressDialog提供的静态show()方法显示对话框即可

创建ProgressDialog,然后调用方法对对话框的进度条进行设置,设置完成后将对话框显示出来即可

 

 

第8组UI组件:菜单

8.1 选项菜单和子菜单(SubMenu)

选项菜单式安卓手机menu 键按下时显示的。

         Menu

                   |--SubMenu:子菜单,可包含多menuItem(菜单项)         

                   |--ContextMenu:上下文菜单,可包含多个menuItem

不同的菜单具有如下特征:

1.选项菜单:不支持勾选标记,并且只显示菜单的”浓缩(condensed)”标题

2.子菜单(SubMenu):不支持菜单项图标,不支持嵌套子菜单

3.上下文菜单(ContextMenu):不支持菜单快捷键和图标

 

Menu接口定义了add()方法来添加菜单项;addSubMenu()来添加子菜单,多种重载方法的区别是:是否将子菜单、菜单项添加到制定菜单组中,是否使用资源中的字符串资源来设置标题。

添加菜单或子菜单的步骤如下:

  1.重写Activity的onCreateOptionsMenu(Menu menu)方法,在该方法调用Menu对象的方法来添加菜单项或子菜单

  2.如果希望应用程序能相应菜单项的单击事件,那么重写Activity的onOptionsItemSelected(MenuItem mi)方法即可,在里面判断id,分别作出响应动作

 

8.2 设置与菜单项关联的Activity

         单击某个菜单项、实现界面跳转:

                                                   调用MenuItem的 setIntent(Intent intent)方法即可


8.3 上下文菜单

         Android用ContextMenu 来代表上下文菜单,为Android应用开发上下文菜单与开发选项菜单的方法基本相似,因为ContextMenu继承了Menu,因此程序可用相同的方法为它添加菜单项

         开发上下文菜单与开发选项菜单的区别在于:开发上下文菜单不是重写CreateOptionsMenu( Menu menu )方法,而是重写onCreateContextMenu(ContextMenumenu, View source, ContextMenu.ContextMenuInfo menuInfo )方法。其中source 代表触发上下文菜单的组件

         开发上下文菜单的步骤如下

1. 重写Activity的onCreateContextMenu( … )方发

2. 调用Activity 的 registerForContextMenu( View view)方法为view组件注册上下文菜单

3. 如果希望应用程序能为菜单项提供相应,则可以重写onContextItemSelect( MenuItem mi)方法,或为其指定菜单项事件监听器

4. 上下文菜单提供给了相关方法,可为上下文菜单设置图标、标题等。

5. 注册后长按View组件会相应

 

8.4 使用XML文件定义菜单

         Android提供了两种创建菜单的方式,一种是在java代码中创建,一种是使用xml资源文件定义。建议用xml文件方式,减少代码量

         菜单资源文件通常应该放在res\menu目录下,菜单资源的根元素通常是

无需指定任何属性。元素内可包含如下子元素:

元素:定义菜单项

子元素:将多个定义的菜单项包装成一个菜单组。它的子元素用户控制整组的菜单行为,如可选、单选等

位于下的就是子菜单

         在程序中定义了菜单资源后,接下来还是重写onCreateOptionsMenu(),onCreateContextMenu() 方法,在这些方法中调用MenuInflater对象的inflate方法加载指定资源对应的菜单即可

 

8.5 使用PopupMenu 创建弹出式菜单那

         PopupMenu代表弹出式菜单,它会在指定组件上弹出PopupMenu,在默认情况下,PopupMenu会显示在该组件的下方或上方。PopupMenu可增加多个菜单项,并可为菜单项添加子菜单。

         使用PopupMenu的步骤:

1.调用new PopupM( Context context, View anchor)创建下拉菜单,anchor代表要激发该弹出菜单的组件

2.调用MenuInflater 的inflate() 方法将菜单资源填充到PopupMenu中

3.调用PopupMenu 的show() 方法显示弹出式菜单

 

 

第9组UI组件:使用活动条( ActionBar )

         活动条(ActionBar )是Android3.0的重要更新之一。ActionBar位于传统标题栏的位置,也就是显示在屏幕的顶部。ActionBar可显示应用的图标和Activity标题-----也就是前面应用程序顶部的内容。除此之外,ActionBar的右边海可以显示活动项( Action Item )

         归纳起来,ActionBar提供了如下功能:

1.显示选项菜单的菜单项(将菜单项显示成Action Item)

2.使用程序图标作为返回Home主屏或向上的导航操作

3.提供交互式View作为Action View

4.提供基于Tab的导航方式,可用于切换多个Fragment

5.提供基于下拉的导航方式

 

9.1启动ActionBar

actionBar.show():显示ActionBar

actionBar.hide():隐藏ActionBar

我的电脑上用继承AppCompatActivity,用v7的包去getSupportActionBar()才能显示

 

9.2使用ActionBar显示选项菜单项

         现在Android手机不再强制手机必须提供Menu按键,这样可能导致用户无法打开选项菜单。为了解决这个问题,Android已经提供了ActionBar作为解决方案,AndroidBar可以将选项菜单显示成Action Item.

         从android3.0开始,MenuItem新增如下方法。

SeShowAsAction(int actionEnum):该方法设置是否将该菜单项显示在ActionBar上,作为Action Item

实际项目推荐使用xml资源文件来定义菜单,因此Android允许在xml菜单资源文件中为指定如下属性:

Android:showAsAction指定该按钮显示的位置,主要有以下几种值可选:

  1.always表示永远显示在ActionBar中,如果屏幕空间不够则无法显示,

  2.ifRoom表示屏幕空间够的情况下显示在ActionBar中,不够的话就显示在overflow中never则表示永远显示在overflow中。

 

9.3 启动程序图标导航

         为了将应用程序图标编程可以点击的图标,可以调用AcionBar的如下方法:

setDisplayHomeAsUpEnabled(Boolean b):设置是否将应用程序图标转变成可点击的图标,并在图标上添加一个向左的箭头,箭头的id为:android.R.id.home:可实现点击界面跳转事件

 

 

9.4 添加Action View

ActionBar上除了可以显示普通的Action Item之外,还可以显示普通的UI组件。为了在ActionBar上添加Action View,可以来用如下两种方式:

  1.定义Action Item时使用android:actionViewClass属性指定Action View的实现类

  2.定义Action Item时使用android:actionLayout属性指定Action View对应的视图资源

 

9.5 使用ActionBar实现Tab导航

         ActionBar的setNavigationMode(Action.NAVIGATION_MODE_TABS)方法设置使用Tab导航方式

         调用ActionBar的addTab()的方法添加多个Tab标签,并为每个Tab标签添加事件监听器

         在实际项目中为了更好第展现Tab导航效果,ActionBar通常会与Fragment结合使用

         Android3.0以前要用v4包,v4还提供了如下配套类:

ViewPager:它是Fragment容器,可以同时管理多个Fragment,并允许多个Fragment切换时提供动画效果

FragmentPagerAdapter:Adapter类,用于为ViewPager提供多个Fragment。通用用于被扩展

PagerTitleStrip:与ViewPager结合使用,用于在Viewpager上显示”导航条”。

 

9.6 使用ActionBar实现下拉式导航

         ActionBar除了可以提供Tab导航支持之外,还提供了下拉式(DropDowm)导航方式,下拉式导航的ActionBar在顶端生成下拉列表框,当用户单击某个列表项时,系统根据用户单击事件导航到指定Fragment。

         为了使用ActionBar实现下拉式导航,按如下步骤进行即可。

  1. 调用ActionBar的actionBar.setNavigationMode(ActionBar.NABIGATION_MODE_LIST)方式实现下拉式列表的导航方式。

  2. 调用ActionBar的setListNavigationCallbacks(SpinnerAdapter adapter,ActionBar.OnNavigationListener callback)方式添加多个列表项,并为每个列表项设置事件监听器。其中第一个参数Adapter负责提供多个列表项,第二个参数为事件监听器。

 

各种杂控件

1 使用Toast显示提示信息框

简单:Toast.make(Context,String,int).show();

自定义:调用taost.set(view)加入一个布局View即可。

 

2 日历视图(CalendarView)组件的功能与用法

         CalendarView可用于显示和选择日期,用户即可选择一个日期,也可通过触摸来滚动日历。如果希望监控该组件的日期改变,则可调用CalendarView的setOnDateChangeListener()方法来为此组件的点击事件添加事件监听器。星座查查看

 

3 日期、时间选择器(DatePicker 和TimerPicker)的功能和用法

         DatePicker和 TimerPicker 是两个比较易用的组件,它们都从FrameLayout派生而来,其中DatePicker 供用户选择日期;而TimerPicker 则供用户选择时间。

         DatePicker和 TimerPicker 在FrameLayout的基础上提供了一些方法来获取当前用户所选择的日期、时间;如果程序需要获取用户所选择的日期、时间,则可通过为DatePicker     添加OnDateChangeListener进行监听,为TimerPicker 添加OnTimerChangeListener进行监听

         日期、时间: 2015年1月15日   ::          3时51分

 

4 数组选择器(NumberPicker)的功能与用法

         数值选择器用于让用户输入数值,用户既可以通过键盘输入数值,也可以通过拖动来选择数值。使用该组件常用如下三个方法

         SetMinValue(inti):设置该组件支持的最小值

         SetMaxValue(inti):设置该组件支持的最大值

         SetValue(inti):设置该组件的当前值

 

5 搜索框(SearchView)的功能与用法

         SearchView是搜索框组件,它可以让用户在文本框输入文字,并允许通过监听器监控用户输入,当用户输入完成后提交搜索,也可通过监听器执行实际的搜索。

 

6 选项卡(TabHost)的功能和用法

TabHost是一种非常实用的组件,TabHost可以很方便地在窗口上放置多个标签页,每个标签页相当于获得了一个与外部容器相同大小的组件摆放区域。通过这种方式,就可以在一个容器里放置更多组件,例如许多手机系统都会在同一个窗口中定义多个标签页来显示通话记录,包括”未接来电”、”已接电话”、”呼出电话”等

与TabHost结合使用的还有如下组件

         TabWidget:代表选项卡的标题条

         TabSpec:代表选项卡的一个Tab页面

TabHost仅仅是一个简单的容器,它提供了如下两个方法来创建、添加标签页

         NewTabSpec(String tag):创建选项卡

         AddTab(TabHost.TabSpectabSpec):添加选项卡

使用TabHost的一般步骤如下:

  1.在界面布局文件中定义TabHost文件,并为该组件定义该选项卡的内容

  2.Activity应该继承TabActivity

  3.调用TabActivitygetTabHost()方法获取TabHost对象

  4.通过TabHost对象来创建、添加选项卡

  5.若需要监控TabHost里当前标签页的改变,则可以为它设置TabHost.OnTabChangeListener监听器

布局文件定义时,TabHost容器需要结合两个组件:TabWidgetFrameLayout,其中TabWidget用于定义标题卡的标题条;FrameLayout则用于“叠层”组合多个选项页面。不仅如此,布局文件中这三个组件的id也有要求:

         TabHostID应该为@androidid/tabhost

         TabWidgetID应该为@androidid/tabs

FrameLayoutID应该为@androidid/tabcontent

标签选项、标题图标、内容

上面这三个ID并不是开发者最定义的,而是引用了Android系统已有的ID。

 

7 滚动视图(ScrollView)的功能和用法

         ScrollView由FrameLayout派生而出,它就是一个用于为普通组件添加滚动条的组件。ScrollView里面最多只能包含一个组件,而ScrollView的作用就是为该组件添加垂直滚动条。通常为一个Layout,里面放多个textview就可以一直滚了

         在默认情况下,ScrollView只是为其他组件添加垂直滚动条,如果应用需要添加水平滚动条,则可以借组与另一个滚动视图:HorizontalScrollView 来是实现。ScrollView 与HorizontalScrollView的功能基本相似,只是前者添加垂直滚动条,后者添加水平滚动条

 

8 Notification 的功能与用法

         Notification是显示在手机状态栏的通知------手机状态栏位于手机屏幕的最上方,那里一般显示手机当前的网络状态、时间等。Notification 所代表的是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification。

         NotificationManager是一个重要的系统服务,该API位于框架层,应用程序可通过NotificationManager向系统发送全局通知。

         Android为Notification增加了Notification.Builder类,通过该类创建Notification对象,并未该对象设置标题、内容等。

         发送Notification很简单,按如下步骤进行即可

1.调用getSystemService(NOTIFICATION_SERVICE)方法获取系统的NotificationManager服务

2.通过构造器创建一个Notification对象

3.为Notification设置各种属性

4.通过NotificationManager发送Notification

 

你可能感兴趣的:(Android基础知识)