7.1.ContextMenu

7.1.1.概述

Android中的上下文菜单类似于Windows中的上下文菜单,Windows中的上下文菜单常称为:鼠标右击后的弹出菜单。

Android的上下文菜单的操作类似于列表项中的长按菜单项的事件响应。

AndroidContextMenu类管理上下文菜单。

7.1.2.常用方法

1Activity.onCreateContextMenu(ContextMenumenu,Viewsource,ContextMenu.

ContexMenuInfomenuInfo);

作用:创建上下文菜单对象。

参数-menu:当前的上下文菜单。

参数-source:当前的view对象,即被长按的控件。

参数-menuInfo:没有任何方法的接口,即ContexMenuInfo是一个空接口。若控件是ListView(后面将介绍到该控件)这类的有多个选项的列表,则该参数可以获得列表中被长按项的索引值。

2add(int);

3add(CharSequence);

作用:为上下文菜单添加一个菜单项,参数可以是字符日串,也可以是资源中定义的字符串索引值。

【示例代码】

@Override

publicvoidonCreateContextMenu(ContextMenumenu,Viewv,

ContextMenuInfomenuInfo){

super.onCreateContextMenu(menu,v,menuInfo);

menu.add(0,0,0,"update");//添加一个标题为update的菜单项

menu.add(0,1,0,"insert");//添加一个标题为insert的菜单项

menu.add(0,2,0,"delete");//添加一个标题为delete的菜单项

menu.add(0,3,0,"query");//添加一个标题为query的菜单项

}

4registerForContextMenu(resId)

作用:为指定控件注册上下文菜单,参数resId是控件的资源索引值。

【示例代码】

TextViewtv=(TextView)findViewById(R.id.tv);

registerForContextMenu(tv);//给tv控件注册上下文菜单

5publicbooleanonContextItemSelected(MenuItemitem)

作用:重写上下文菜单的被点击的事件响应程序.

【示例代码】

//上下文菜单项选择的响应事件

@Override

publicbooleanonContextItemSelected(MenuItemitem){

switch(item.getItemId()){

caseR.id.miUpdate://若菜单项是miUpdate

Toast.makeText(this,getText(R.string.update),3000).show();

break;

caseR.id.miInsert://若菜单项是miInsert

Toast.makeText(this,R.string.insert,3000).show();

break;

caseR.id.miDelete://若菜单项是miDelete

Toast.makeText(this,R.string.delete,3000).show();

break;

}

returnsuper.onContextItemSelected(item);

}

说明:以上代码中的item是上下文菜单的当前被点击的菜单项,下面用switch语句对该菜单项的资源索引值(item.getItem())进行判断,R.id.miUpdate是资源中定义的上下文菜单项的资源索引值。

7.1.3.使用资源中定义的上下文菜单

步骤1、在项目的res文件夹下创建menu文件夹;

步骤2、在menu文件夹下创建上下文菜单资源文件,如:context_menu.xml,该文件内容如下所示:

<?xmlversion="1.0"encoding="utf-8"?>

<menuxmlns:android="http://schemas.android.com/apk/res/android">

<item

android:id="@+id/miUpdate"

android:title="@string/update"/>

<item

android:id="@+id/miInsert"

android:title="@string/insert"/>

</menu>

步骤3、在代码中解析以上资源文件,示例代码如下:

//创建上下文菜单

@Override

publicvoidonCreateContextMenu(ContextMenumenu,Viewv,

ContextMenuInfomenuInfo){

super.onCreateContextMenu(menu,v,menuInfo);

//创建菜单解析器对象

MenuInflaterinflator=getMenuInflater();

//解析资源中定义的菜单

inflator.inflate(R.menu.context_menu,menu);

//设置上下文菜单的图标

menu.setHeaderIcon(R.drawable.icon);

//设置上下文菜单的标题

menu.setHeaderTitle(R.string.cmTitle);

}

7.1.4.OptionMenuContextMenu的区别

1、选项菜单由onCreateOpitionsMenu()方法创建,单击menu按钮,与Activity绑定。

2、上下文菜单由onCreateContextMenu()方法创建,与某个View绑定。

3、每单击一次View,与该View绑定的上下文菜单的onCreateOptionsMenu都会执行一次。而选项菜单只会执行一次。

7.2.CheckBox控件

7.2.1.概述

复选框是UI中常用的控件,复选框的类名:CheckBox,该类继承自Button。如图-1所示:

图-1

7.2.2.常用属性

Checked:在资源文件中定义checked值为true,则该checkBox控件为选中状态,如图1中标题为音乐的checkBox控件。

提示:checked的默认值是false

【示例代码】

7.2.3.常用方法

isChecked();

作用:返回该控件是否被选中,若选中则返回值为true,否则为false

【示例代码】

CheckBoxcheckBox=(CheckBox)findViewById(resId);

If(checkbox.isChecked()){

Toast.makeText(this,”该控件被选中”,3000).show();

}else{

Toast.makeText(this,”该控件未被选中”,3000).show();

}

7.3.OnCheckedChangeListener接口

7.3.1.概述

该接口负责监听CheckBox等控件的选中状态的变化。

7.3.2.常用方法

voidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked);

作用:监听控件选中状态的变化。

参数-buttonView:监听的控件对象;

参数-isChecked:若该控件处于选中状态,值为true,否则是false

【示例代码】显示图-2效果,当选中图-2中某个CheckBox控件时,在窗口中显示该控件的标题加上isselected字符串。

图-2

//MainAct类实现OnCheckedChangeListener接口

publicclassMainActextendsActivityimplementsOnCheckedChangeListener{

CheckBoxmChkMusic,mChkSport,mChkReadBook,mChkCollectMail;

StringmText="";

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//创建图-2中的两个控件

mChkCollectMail=(CheckBox)findViewById(R.id.chkCollectMail);

mChkReadBook=(CheckBox)findViewById(R.id.chkReadBook);

//注册这两个控件的onCheckedChanged事件

mChkCollectMail.setOnCheckedChangeListener(this);

mChkReadBook.setOnCheckedChangeListener(this);

}

//实现OnCheckedChangeListener.OnCheckedChanged()方法

@Override

publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){

switch(buttonView.getId()){

caseR.id.chkReadBook://这是图-2中的readbook控件的资源索引

caseR.id.chkCollectMail://这是图-2中的collectmail控件的资源索引值

if(isChecked){

mText=buttonView.getText().toString();

Toast.makeText(MainAct.this,mText+"isselected",5000).show();

}

}

}

}

7.4.RadionButton控件

7.4.1.概述

单选按钮是UI中常用的元素,类名:RadioButton,如图-3所示:

图-3

7.4.2.常用属性

Checked:控件是否处于选中状态

7.4.3.【示例代码

以下代码定义了图-3中两个RadioButton控件的显示样式:

<RadioButton

android:id="@+id/rbMale"

android:text=""

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:checked="true"/>

<RadioButton

android:id="@+id/rbFeMale"

android:text=""

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

7.5.RadionGroup控件

7.5.1.概述

以上代码中的两个控件还不能形成互斥的效果,即男和女两个控件可以同时处于选中状态。在Android中必须用RadioGroup控件将一组需要互斥的RadioButton包括起来。

7.5.2.【示例代码

将以上代码改进,形成男和女两个RadioButton互斥(即不能同时处于选中状态)的效果,如下代码所示:

<RadioGroup

android:layout_width="fill_parent"

android:layout_height="wrap_content">

<RadioButton

android:id="@+id/rbMale"

android:text="男"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:checked="true"/>

<RadioButton

android:id="@+id/rbFeMale"

android:text="女"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

</RadioGroup>

7.6.ProgressBar控件

7.6.1.概述

进度条(ProgressBar)是UI中非常实用的控件,类名:ProgressBar,用于动态显示某个比较耗时操作的进度,可避免因操作时间长,使用户感觉程序失去了响应,从而提高用户的使用体验。如图-4所示:

图-4

说明:

图-4靠上部分显示了一个默认的进度条样式(不断转动的圆圈),该进度条没有进度,用于显示在无法确定进度的操作。

图-4下面显示了一个水平进度条,该进度条上面有一个TextView控件显示该进度条的进度值目前是22

7.6.2.常用属性

XML属性

说明

max

设置进度条的最大值

progess

设置已完成的进度值

progressDrawable

设置进度条的轨道的绘制形式

progressBarStyle

设置进度条样式

progressBarSytleHorizontal

水平进度条样式

progressBarStyleLarge

大进度条样式

proressBarStyleSmall

小进度条样式

图-5

progressBar的style有如下值:

Horizontal

水平进度条

Inverse

不断跳跃、旋转的进度条

Large

大进度条

Large.Inverse

不断跳跃、旋转的大进度条

Small

小进度条

Small.Inverse

不断跳跃、旋转的小进度条

图-6

说明

1、以上的style属性值前面都要加上如下的前缀:

@android:style/Widget.ProgressBar.,例如:

@android:style/Widget.ProgressBar.Large:大进度条

2Widget:小部件,我们所称的UI中的控件,也称为小部件。

示例代码:

以下代码定义了图-4中两个进度条控件:

<!--默认样式的进度条-->

<ProgressBar

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

<!--水平样式的进度条-->

<ProgressBar

android:id="@+id/pb"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

style="@android:style/Widget.ProgressBar.Horizontal"

android:max="100"/>

7.7.SeekBar控件

7.7.1.概述

拖动条控件,类名:SeekBar,与进度条在外观上相似,并且允许用户通过拖动滑块来改变滑块的值。手机中调整屏幕亮度、音量的用的就是SeekBarSeekBar控件如图-7所示:

图-7

7.7.2.常用属性

SeekBarProgressBar的间接子类,因此SeekBar的属性参见ProgressBar的属性列表

7.7.3.示例代码

以下代码定义了图-7的控件样式:

<SeekBar

android:id="@+id/sb"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:max="100"

android:progress="10"/>

说明:max属性:表示整个控件的最大长度值。Progress表示目前滑块所处的位置的值是10

7.8.OnSeekBarChangeListener接口

7.8.1.概述

该接口负责监听SeekBar控件的的滑块移动。

7.8.2.常用方法

1voidonProgressChanged(SeekBarseekBar,intprogress,booleanfromUser);

作用:滑块进度值发生改变时,触发本方法。

说明:

参数-seekBar:当前的SeekBard对象。

参数-progress:滑块的进度值。

参数-fromUser:用户是否拖动了滑块,true:是,false;否。

2voidonStartTrackingTouch(SeekBarseekBar);

作用:开始移动滑块时,触发本方法,滑块移动中本方法不再执行。

3voidonStopTrackingTouch(SeekBarseekBar);

作用:结束移动滑块时,触发本方法。

7.8.3.【示例代码

//实现OnSeekBarChangeListener接口

publicclassMainActextendsActivityimplementsOnSeekBarChangeListener{

SeekBarsb;

intmProgress;//存放滑块进度值

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

sb=(SeekBar)findViewById(R.id.sb);//创建滑块对象

//注册进度条改变的监听事件

sb.setOnSeekBarChangeListener(this);

}

//实现onProgressChanged方法,进度条发生改变时触发该方法

@Override

publicvoidonProgressChanged(SeekBarseekBar,intprogress,

booleanfromUser){

mProgress=progress;//存放当前滑块的进度值

}

//实现onStartTrackingTouch方法,该方法在开始拖动进度条时触发

@Override

publicvoidonStartTrackingTouch(SeekBarseekBar){

Log.i("SeekBar","beginTrackingTouch");

}

//实现onStopTrackingTouch方法,该方法在进度拖动时触发

@Override

publicvoidonStopTrackingTouch(SeekBarseekBar){

Log.i("SeekBar","endTrackingTouch");

Log.i("SeekBar","progress="+mProgress);

}

7.9.RatingBar控件

7.9.1.概述

星级评分控件,类名:RatingBar,与拖动条控件很相似,拖动条控件是通过拖动条上滑块来改变值。RatingBar是通过拖动来改变星级的值。如图-8所示:

图-8

7.9.2.常用属性

RatingBarProgressBar类的间接子类,属性可参见ProgressBar控件的属性列表。以下是该控件独有的属性。

XML属性

说明

numStars

星的数量,如图-8中有4颗半星

stepSize

星变化的步长,可以是小数,如0.5(每次增长或减少半颗星)

-9

【示例代码】

以下代码定义了图-8RatingBar的显示样式:

<RatingBar

android:id="@+id/rb"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:numStars="4.5"

android:stepSize="0.5"/>

7.10OnRatingBarChangeListener接口

7.10.1.概述

该接口负责监听RatingBar控件的滑块移动。

7.10.2.常用方法

voidonRatingChanged(RatingBarratingBar,floatrating,booleanfromUser)

作用:当RatingBar中的滑块移动时,触发本方法执行。

参数-ratingBar:当前的星级滑块对象。

参数-rating:当前星的个数。

参数-fromUser:用户是否拖动了滑块,true:是,false;否。

7.10.3.【示例代码

//实现OnRatingBarChangeListener接口

publicclassMainActextendsActivityimplementsOnRatingBarChangeListener{

RatingBarmRatingBar;

TextViewmtvRatingBar;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//实例化mtvRatingBar控件,该控件负责显示星级控件中当前星的个数

mtvRatingBar=(TextView)findViewById(R.id.tvRagingBar);

//实例化星级控件

mRatingBar=(RatingBar)findViewById(R.id.rb);

//注册onRatingChanged事件

mRatingBar.setOnRatingBarChangeListener(this);

}

//实现onRatingChanged方法,该方法在RatingBar控件发生改变时触发

@Override

publicvoidonRatingChanged(RatingBarratingBar,floatrating,

booleanfromUser){

//在标签中显示目前星的个数

mtvRatingBar.setText(""+mRatingBar.getRating());

}

}

7.11.DatePicker控件

7.11.1.概述

DatePicker(日期选择器)供用户选择日期。该控件如图-10所示:

图-10

图-10用以下xml代码定义:

7.11.2.常用方法

init(year,month,day,OndateChangedListener()):初始化控件中的年月日,并设置一个数据发生改变的响应事件。

7.12.OnDateChangedListener接口

7.12.1.概述

该接口负责监听DatePicker控件中日期的变化。

7.12.2.常用方法

OndateChangedListener()

作用:DatePicker对象中的日期因用户的选择发生改变时,本事件被触发。

【示例代码】

//实现OnDateChangedListener接口

publicclassMainActextendsActivityimplementsOnDateChangedListener,OnTimeChangedListener{

DatePickermDatePicker;//定义成员变量

TextViewmTvShowTime;//显示日期结果的标签

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mTvShowTime=(TextView)findViewById(R.id.tvShowTime);

mDatePicker=(DatePicker)findViewById(R.id.datePicker);

//初始化mDatePicker

mDatePicker.init(2011,11,5,this);

}

//实现onDateChanged方法,日期改变时触发本方法

@Override

publicvoidonDateChanged(DatePickerview,intyear,intmonthOfYear,

intdayOfMonth){

StringBuffersb=newStringBuffer();

sb.append(year+"年").append(monthOfYear+"月")

.append(dayOfMonth+"日");

mTvShowTime.setText(sb.toString());//显示结果

}

7.13.TimePicker控件

7.13.1.概述

TimePicker控件负责选择时间。如图-11所示:

-11

7.13.2.常用方法

1getCurrentHour():获取小时。

2getCurrentMinute():获取分钟。

7.14.OnTimeChangedListener接口

7.14.1.概述

OnTimeChangedListener接口负责监听TimePicker控件中时间改变。

7.14.2.常用方法

voidonTimeChanged(TimePickerview,inthourOfDay,intminute);

作用:当TimePicker中的时间发生改变时,触发本方法执行。

参数-view:当前的TimePicker对象。

参数-hourOfDay:小时。

参数-minute:分钟。

7.14.3.【示例代码

以下代码实现是-12的效果,当单击TimePicker控件时,显示当前时间。

图-12

//实现OnTimeChangedListener接口

publicclassMainActextendsActivityimplementsOnTimeChangedListener{

TimePickermTimePicker;

TextViewmTvShowTime;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mTvShowTime=(TextView)findViewById(R.id.tvShowTime);

mTimePicker=(TimePicker)findViewById(R.id.timePicker);

//注册setOnTimeChangedListener事件响应程序

mTimePicker.setOnTimeChangedListener(this);

}

//实现ontimeChanged方法

@Override

publicvoidonTimeChanged(TimePickerview,inthourOfDay,intminute){

Stringtext=hourOfDay+"小时"+minute+"分";

Toast.makeText(this,text,3000).show();

}

}

7.15.DigitalClock控件

数字时钟,父类是TextView

7.16.AnalogClock控件

模拟时钟,父类是View。如图-13所示:

图-13

定义该控件的xml代码如下所示:

<AnalogClock

android:id="@+id/acClock"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

7.17.常用技巧

设置eclipse开发环境中,类中的方法会在编辑区的右边框用相同颜色标识,如图-14所示:

MainAct类中有三个方法:onDestoryonStart(),还有一个方法没有显示。在编辑区的右边框有三个蓝色的小矩形(称为标记)。

(1)单击图-14中右边框的第一个蓝色标记,将定位至当onDestory()方法。

(2)单击图-14中右边框的第二个蓝色标记,将定位至onStart()方法。

提示:若一个文件中有多个类,并且两个类中有同名方法出现,那么通过这种标记可以方便地找到指定类的方法,不会出现混淆问题。

图-14

标记没颜色可以修改,以下介绍修改标记颜色步骤:

步骤1、在编辑区的任意位置右击鼠标;

步骤2、在弹出菜单中选择Preferences。

步骤3、选择General>Editors>TextEditors—>Annotations->occurrences,选择颜色,如图-15所示:

-15

步骤4、在弹出的颜色列表中选择颜色。

7.18.常见问题

1.同样名称的类,在不同的包中,两个类如果同时使用,需要指定它的包名。

示例代码:

importandroid.widget.CompoundButton.OnCheckedChangeListener;

importandroid.widget.RadioButton;

importandroid.widget.RadioGroup;

publicclassMainActextendsActivity

implementsOnCheckedChangeListener,

android.widget.RadioGroup.OnCheckedChangeListener

说明:

以上代码中,标注(1)指向的接口是第一行(红框所指)的导包路径。

标注(2)指向的类与标注(1)相同,但路径不同,因此在第二个接口前面要写明接口所在的包路径。这样Android才能正确区分两个同名接口。

更多相关文章

  1. Android 图片加载Bit地图 OOM异常解决方法
  2. 微软的 Android 计划:邪恶的天才计划或只是邪恶?
  3. 控件的android:layout_alignParentTop属性找不到的原因
  4. Android实现全屏显示的方法 固定横屏或者竖屏的方法
  5. Android UI基础——SeekBar&RatingBar控件
  6. android 控件位置常用布局
  7. [Android] 设置控件是否可见

随机推荐

  1. net :: ERR_CLEARTEXT_NOT_PERMITTED
  2. checkbox style
  3. 【Android】详解Android动画之Interpolat
  4. 完成android的manven项目管理
  5. Android - 解决onSaveInstanceState的Bug
  6. 常用Android系统调用
  7. 1.android 开发学习---Intent 用法
  8. Android常用颜色值
  9. EditText保留两位小数并输入不超过最大值
  10. 2.4.4 进度条