Android常用的UI组件

1 TextView 及其子类

1.1 TextView 和 EditView

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

  • RadioButton:单选按钮,通常与RadioGroup一起使用;
  • ToggleButton:状态开关按钮;
  • CheckBox:复选按钮;
  • Switch:开关。

1.3 AnalogClock 和 TextClock

  • TextClock:取代早起的DigitalClock组件,能以24/12小时制来显示时间,数字;
  • AnalogClock:继承View组件,重写了View的OnDraw方法方法,它会在View上绘制模拟时钟;

1.4 Chronometer:可用于倒计时

2 ImageView及其子类

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

  • ImageButton:图片按钮;
  • QuickContactBadge:显示关联到特定联系人;
  • ZoomButton:代表”放大“、“缩小”两个按钮。

3 AdapterView及子类

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

  • AbsListView
    –ListView
  • AbsSpinner
    –Spinner
    –Gallery
  • AdapterViewAnimator

3.1 ListView(列表视图)和ListActivity

ListView:常见组件,它以垂直列表的形式显示所有列表项
生成方式有如下两种:
1.直接使用ListView进行创建
2.让Activity继承ListActivity(相当于该Activity显示的组件为ListView)
ListView显示出AdapterVIew的特征:通过setAdapter(Adapter)方法为之提供Adapter,并由Adapter提供列表项即可。
ListView、GridVIew、Spinner、Gallery等AdapterView都只是容器,而Adapter负责提供每个“列表项”组件,AdapterView则负责采用合适的方式显示这些列表。

3.2 Adapter接口及实现类

1.ArrayAdapter:简单、易用的Adapter,通常用于将数据或List集合的多个值包装成多个列表项
2.SimpleAdapter:并不简单、功能强大的Adapter,可用于将List集合的多个对象包装成多个列表项
3.SimpleCursorAdapter:与SImpleAdapter基本相似,只是用于包装Cursor提供的数据
4.BaseAdapter:通常用于被扩展。扩展BaseAdapter可以对个列表项进行最大限度的定制。以上Adapter皆继承于它。

实例:

  1. ArrayAdapter
new ArrayAdapter(Context context, // ContextL:上下文,即所在的Activity
	int resource, // Resource:布局样式,一般为TextView
	int textViewResourceId); // textViewResource:数据源,可为自定义的String数据
  1. SimpleAdapter:最大难点在于由五个参数
new SimpleAdapter(Context context,
	List<? extends Map<String, ?>> data, // 集合中每个Map(String, Object)作为列表选项
	int resource, // 指定界面布局的id
	String[] from, //该参数决定map对象中哪些key对应value来生成列表项
	int[] to); // 该参数决定填充那些部件 
  1. BaseAdapter,用于扩写,需要如下四个方法
    1, getCount():该方法返回值用于控制Adapter会包含多个列表项
    2.getItem(int position):该方法的返回值决定地position出的列表项内容
    3.getItemId(int position):该方法的返回值决定第position出的列表项的ID
    4.getView(int positionm, View converView, ViewGroup parent):该方法的返回值决定第position出的列表项组件

3.3 AutoCompleteTextView(自动完成文本框)

AutoCompileTextView由Editext派生而出,也是一个编辑框,不过多一个功能:当用户输入一定字符之后,自动完成文本框会显示一个下拉菜单,供用户从中选择。

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

GridView用于在界面上按行、列分布的方式来显示多个组件。
与ListView由共同的父类:AdbListVIew
与ListView唯一的区别:ListView只显示一列,它可以显示多列

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

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

3.6 Spinner

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

3.7 AdapterVIewFlipper

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

3.8 StackView

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

4 ProcessBar及其子类

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

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

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

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

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

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

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

5 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属性

6 对话框

四种常用的对话框

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

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

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

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

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

6.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组件将会作为对话框的内容,如做一个对话框的登陆界面等。

6.2 对话框风格的窗口

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

6.3 使用PopupWindow

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

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

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

6.4 使用DatePicker、TimePicker

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

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

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

6.5 使用ProgressDialog 创建进度对话框

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

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

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

7 菜单

7.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,分别作出响应动作

7.2 设置与菜单项关联的Activity

单击某个菜单项、实现界面跳转:
调用MenuItem的 setIntent(Intent intent)方法即可

7.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组件会响应

7.4 使用XML文件定义菜单

Android提供了两种创建菜单的方式,一种是在java代码中创建,一种是使用xml资源文件定义。建议用xml文件方式,减少代码量
菜单资源文件通常应该放在res\menu目录下,菜单资源的根元素通常是<menu…/>,

<menu…/>无需指定任何属性。<menu…/>元素内可包含如下子元素:

<item…/> 元素:定义菜单项

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

位于<item…/>下的<menu…/>就是子菜单

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

7.5 使用PopupMenu 创建弹出式菜单栏

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

使用PopupMenu的步骤:

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

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

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

各种其他控件

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.调用TabActivity的getTabHost()方法获取TabHost对象

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

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

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

  • TabHost的ID应该为@android:id/tabhost

  • TabWidget的ID应该为@android:id/tabs

FrameLayout的ID应该为@android:id/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值