手持终端
Eclipse平台下Android开发环境的搭建
PhoneGap配置到Eclipse开发环境
使用PhoneGap开发Android应用程序
PhoneGap3.0以上版本配置到Eclipse开发环境
使用PhoneGap3.0版本开发Android应用程序
PhoneGap3.0的第三方Android插件
Cordova配置到Android Studio开发环境
Android系统基本架构
Android的字符串颜色图片样式
Android的常用控件及菜单
Android的消息提示及传递
Android系统的组件通信
Android系统的Service
Android的广播消息接收
Android的数据存储与访问
Android系统的网络应用
Android图形图像处理
Android的Fragment框架
Android系统的并发编程
Java源文件结构与保留字
Java语言的数据类型与变量
Java的运算符与流程控制
Java语言的数组及操作
Java面向对象编程
Java的常用类
Android开发常用工具及命令
Android应用程序权限管理
Android系统提供的R类内置资源
Android系统的控件类及其方法
Android系统的菜单类及其方法
Android系统的对话框
Android应用程序模型及组件
Android的绘图类及方法
Android系统的动画效果
Android的数据库操作
Android的多媒体功能
Android系统照相机的使用
Android的文本朗读TTS
获取Android系统信息
Android系统的电话操作
Android系统的定位
Android系统的传感器
菜单是应用程序UI设计不可或缺的一部分。Android系统中提供了三种形式的菜单,包括选项菜单Options Menu、子菜单SubMenu、上下文菜单Context Menu。开发者可以为应用程序添加选项菜单,也可以为界面上的一个View对象添加上下文菜单。
1.Menu类:菜单
Menu类提供了最基本的菜单对象及操作,一个Menu对象在Android手机中代表一个菜单。在Menu对象中可以添加MenuItem菜单项,也可以添加SubMenu子菜单。
1)onCreateOptionsMenu方法:初始化选项菜单
该方法用于初始化选项菜单,在应用程序第一次显示选项菜单时调用,在该方法中主要设置菜单项。在Android手机中,点击Menu按钮将调出选项菜单。语法格式:
public boolean onCreateOptionsMenu(Menu menu)
其中,参数menu表示菜单,通过该变量可以为应用程序添加各个菜单。
2)add方法:添加菜单项
该方法用于向菜单中添加菜单项,返回值为Menu类型,这是设置选项菜单的最主要方法,通常在onCreateOptionsMenu方法中调用。语法格式有多种:
public abstract MenuItem add(int groupId,int itemId,int order,CharSequence title)
public abstract MenuItem add(int groupId,int itemId,int order,int titleRes)
public abstract MenuItem add(CharSequence title)
public abstract MenuItem add(int titleRes)
其中,groupId为菜单项所在的组Id,通过为菜单项分组,可以进行批量处理,也可以赋值NONE表示不使用组Id;参数itemId为菜单项的唯一标识Id;order为菜单项的顺序,也可以赋值为NONE;参数title为菜单项所显示的菜单名称;参数titleRes为菜单项所显示的菜单名称,通过引用字符串Id来表示。
3)addSubMenu方法:添加子菜单项
该方法用于向菜单中添加子菜单项,返回值为SubMenu对象,这是设置选项子菜单的最主要方法,通常在onCreateOptionsMenu方法中调用。语法格式有多种:
public abstract SubMenu addSubMenu(int groupId,int itemId,int order,CharSequence title)
public abstract SubMenu addSubMenu(int groupId,int itemId,int order,int titleRes)
public abstract SubMenu addSubMenu(CharSequence title)
public abstract SubMenu addSubMenu(int titleRes)
其中,groupId为子菜单项所在的组Id,通过为子菜单项分组,可以进行批量处理,也可以赋值NONE表示不使用组Id;参数itemId为子菜单项的唯一标识Id;order为子菜单项的顺序,也可以赋值为NONE;参数title为子菜单项所显示的菜单名称;参数titleRes为子菜单项所显示的菜单名称,通过引用字符串Id来表示。示例:
@Override
public boolean onCreateOptionsMenu(Menu menu){
menu.add(0,1,1,"黑色");
menu.add(0,2,2,"红色");
menu.addSubMenu(0,3,3,"字号");
return super.onCreateOptionsMenu(menu);
}
4)onOptionsItemSelected方法:选中菜单处理
该方法用于设置当选项菜单中某个选项被选中时执行的操作。该方法传入的是MenuItem对象,通过该对象可以获知哪个菜单项被选中,这是执行菜单处理的主要方法。语法格式:
public boolean onOptionsItemSelected(MenuItem item)
其中,参数item为传入的菜单项,程序中通过该参数可以获取哪个菜单项被选中。示例:
TextView tv=null;
@Override
public void onCreate(Bundle savedInstancesState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findViewById(R.id.textView2);
tv.setText("设置选项菜单!");
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
menu.add(0,1,1,"黑色");
menu.add(0,2,2,"红色");
menu.addSubMenu(0,3,3,"字号");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
if(item.getItemId()==1){
tv.setTextColor(Color.BLACK);
}else if(item.getItemId()==2){
tv.setTextColor(Color.RED);
}
return super.onOptionsItemSelected(item);
}
5)onOptionsMenuClosed方法:选项菜单关闭处理
该方法用于设置当选项菜单关闭或退出时执行的操作,其输入参数为Menu对象。当用户执行了某个菜单,或者按了返回按键,都将触发该方法。语法格式:
public void onOptionsMenuClosed(Menu menu)
其中,参数menu为传入的菜单。示例:
@Override
public boolean onOptionsItemClosed(Menu menu){
Toast.makeText(getApplicationContext(),"关闭了选项菜单",
Toast.LENGTH_LONG).show();
super.onOptionsMenuClosed(menu);
}
2.MenuItem类:菜单项
MenuItem类用于处理MenuItem对象,每一个MenuItem对象代表了一个菜单项。通过MenuItem类可以为菜单项添加各种个性化的设置,例如图标、快捷键等。
1)getItemId方法:获取菜单项Id
该方法用于获取菜单项的Id,其返回值就是在add方法中设置的ItemId。该方法通常在onOptionsItemSelected方法中使用,通过获取Id来判断是哪个菜单项被点击,然后对应执行相应的处理代码。语法格式:
public abstract int getItemId()
2)getTitle方法:获取标题
该方法用于获取菜单项的显示标题,返回值为字符串,主要用于在程序中对菜单项进行更改设置的场合。语法格式:
public abstract CharSequence getTitle()
3)getOrder方法:获取顺序
该方法用于获取菜单项的顺序,返回值为int整型。语法格式:
public abstract int getOrder()
示例:
@Override
public boolean onOptionsItemSelected(MenuItem item){
tv.setText("菜单项"+item.getItemId()+":\r\n标题:"+item.getTitle()+"\r\n顺序:"
+item.get.Order());
return super.onOptionsItemSelected(item);
}
4)setIcon方法:设置图标
该方法用于设置菜单项显示的图标,可以通过指定图片Id或者属于Drawable对象来实现。语法格式有两种:
public abstract MenuItem seIcon(int iconRes)
public abstract MenuItem seIcon(Drawable icon)
其中,参数iconRes为引用图片的资源Id,icon为图片的drawable对象。示例:
menu1.setIcon(R.drawable.icon);
5)setAlphabeticShortcut方法:设置字母快捷键
该方法用于设置菜单项的字母快捷键。在显示菜单时,可以直接按相应的字母快捷键来执行菜单命令。语法格式:
public abstract MenuItem setAlphabeticShortcut(char alphaChar)
其中,参数alphaChar为字符,可以为a~z。示例:
menu1.setAlphabeticShortcut('b');
6)setNumericShortcut方法:设置数字
该方法用于设置菜单项的数字快捷键。在显示菜单的时候,可以直接按相应的数字快捷键来执行菜单命令。数字快捷键主要在12键数字键盘的手机上使用。语法格式:
public abstract MenuItem setNumericShortcut(char numericChar)
其中,参数numericChar为数字,可以为0~9。示例:
menu1.setNumericShortcut('1');
7)setShortcut方法:设置快捷键
该方法用于设置菜单项的字母快捷键和数字快捷键。在显示菜单的时候,可以直接按相应的字母或数字快捷键来执行菜单命令。该方法同时设置了字母快捷键和数字快捷键,可以适应不同的硬件需求。语法格式:
public abstract MenuItem setShortcut(char numericChar,char alphaChar)
其中,参数numericChar为数字快捷键,可以为0~9,主要用于12键数字键盘的手机中;alphaChar为字母快捷键,可以为a~z,主要用于QWER全键盘的手机中。示例:
menu1.setShortcut('1','b');
8)setOnMenuItemClickListener方法:设置监听器
该方法用于设置菜单项监听器。当菜单项被点击时,将触发该监听器,用户可以在该监听器中放置菜单执行代码。该方法的作用与onOptionsItemSelected方法类似,可以实现相同的功能。语法格式:
public abstract MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener menuItemClickListener)
示例:
TextView tv=null;
@Override
public void onCreate(Bundle savedInstancesState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findViewById(R.id.textView2);
tv.setText("设置选项菜单!");
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuItem menu1=menu.add(0,1,1,"黑色");
MenuItem menu2=menu.add(0,2,2,"红色");
menu1.setIcon(R.drawable.icon);
menu2.setIcon(R.drawable.icon);
menu1.setOnMenuItemClick(MenuItem.OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item){
tv.setText("点击了菜单项1");
return false;
}
});
menu2.setOnMenuItemClick(MenuItem.OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item){
tv.setText("点击了菜单项2");
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
3.SubMenu类:子菜单
在Android中还可以设置子菜单,通过子菜单可以将相同类别的菜单命令归类。SubMenu类继承于Menu类,每一个SubMenu对象代表了一个子菜单,很多方法都与Menu类和MenuItem类相似,也有一些特有的方法。
1)setIcon方法:设置图标
该方法用于设置子菜单显示的图标,可以通过指定图片Id或使用Drawable对象来实现。通过设置图标,可以使菜单功能更明显。语法格式有两种:
public abstract SubMenu setIcon(int iconRes)
public abstract SubMenu setIcon(Drawable icon)
其中,参数iconRes为引用图片的资源Id,icon为图片的Drawable对象。
2)add方法:添加子菜单项
该方法用于向子菜单中添加菜单项,返回值为MenuItem类型,这是设置子菜单项的最主要方法,与Menu类中的add方法类似。语法格式有几种:
public abstract MenuItem add(int groupId,int itemId,int order,CharSequence title)
public abstract MenuItem add(int groupId,int itemId,int order,int titleRes)
public abstract MenuItem add(CharSequence title)
public abstract MenuItem add(int titleRes)
其中,groupId为子菜单项所在的组Id,通过为子菜单项分组,可以进行批量处理,也可以赋值NONE表示不使用组Id;参数itemId为子菜单项的唯一标识Id;order为子菜单项的顺序,也可以赋值为NONE;参数title为子菜单项所显示的菜单名称;参数titleRes为子菜单项所显示的菜单名称,通过引用字符串Id来表示。
3)setOnMenuItemClickListener方法:设置监听器
该方法用于设置子菜单项监听器,当子菜单项被点击的时候,将触发该监听器。可以在该监听器中放置菜单执行代码,该方法的作用与MenuItem类中的setOnMenuItemClickListener方法类似。语法格式:
public abstract MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener menuItemClickListener)
示例:
TextView tv=null;
@Override
public void onCreate(Bundle savedInstancesState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findViewById(R.id.textView2);
tv.setText("设置选项菜单!");
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuItem menu1=menu.add(0,1,1,"黑色");
MenuItem menu2=menu.add(0,2,2,"红色");
SubMenu menu3=menu.addSubMenu(0,3,3,"字号");
menu1.setIcon(R.drawable.icon);
menu2.setIcon(R.drawable.icon);
menu3.setIcon(R.drawable.icon);
MenuItem sub1=menu3.add(1,4,4,"10号");
MenuItem sub2=menu3.add(1,5,5,"15号");
MenuItem sub3=menu3.add(1,6,6,"20号");
MenuItem sub4=menu3.add(1,7,7,"25号");
sub1.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item){
tv.setTextSize(10);
return false;
}
});
sub2.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item){
tv.setTextSize(15);
return false;
}
});
sub3.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item){
tv.setTextSize(20);
return false;
}
});
sub4.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item){
tv.setTextSize(25);
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
4.ContextMenu类:上下文菜单
ContextMenu类继承于Menu类,实现了上下文菜单的功能。在Android中上下文菜单注册到某个View对象上,用户通过长按该View对象便可以调出上下文菜单。在Android系统中,上下文菜单不支持快捷键,可以为任意的View对象添加上下文菜单,也可以在已有的上下文菜单中添加新菜单项。ContextMenu类中的很多方法都与Menu类和MenuItem类相似。
1)registerForContextMenu方法:注册上下文菜单
该方法用于为一个View对象注册上下文菜单,其输入参数为控件的View对象。在使用上下文菜单之前,必须首先使用该方法进行注册,否则将无法使用。语法格式:
public void registerForContextMenu(View view)
其中,参数view为Activity上的一个View对象,主要是控件。
2)onCreateContextMenu方法:初始化上下文菜单
该方法用于初始化上下文菜单,在应用程序每次显示上下文菜单的时候调用。在该方法中,主要通过add方法设置上下文菜单项。语法格式:
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo)
其中,参数menu为上下文菜单对象,通过该变量可以为应用程序添加各个菜单;参数v注册上下文菜单的View对象;menuInfo为上下文菜单需要额外显示的信息。示例:
TextView tv=null;
EditText et=null;
@Override
public void onCreate(Bundle savedInstancesState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findViewById(R.id.textView1);
et=(EditText)findViewById(R.id.editText1);
this.registerForContextMenu(tv);
this.registerForContextMenu(et);
}
@Override
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo){
menu.setHeaderIcon(R.drawable.icon);
if(v==tv){
menu.add(0,1,1,"10号");
menu.add(0,1,1,"20号");
menu.add(0,1,1,"30号");
menu.add(0,1,1,"40号");
}else if(v==et){
menu.add(0,1,1,"20号");
menu.add(0,1,1,"40号");
}
return super.onCreateOptionsMenu(menu,v,menuInfo);
}
3)onContextItemSelected方法:选中菜单处理
该方法用于设置当上下文菜单中某个选项被选中中时执行的操作。该方法传入的是MenuItem对象,通过该对象可以获知哪个菜单项被选中,这是执行菜单处理的主要方法。语法格式:
public boolean onContextItemSelected(MenuItem item)
其中,参数item为传入的菜单项,程序中通过该参数可以获知哪个菜单项被选中。示例:
@Override
public boolean onContextItemSelected(MenuItem item){
switch(item.getItemId()){
case 1:
tv.setTextSize(10);
break;
case 2:
tv.setTextSize(20);
break;
case 3:
tv.setTextSize(30);
break;
case 4:
tv.setTextSize(40);
break;
case 5:
et.setTextSize(20);
break;
case 6:
et.setTextSize(40);
break;
}
return super.onContextItemSelected(item);
}
4)onContextMenuClosed方法:关闭上下文菜单处理
该方法用于设置当上下文菜单关闭或退出时执行的操作,其输入参数为Menu对象。当用户执行了某个菜单,或者按了返回键,都将触发该方法。语法格式:
public void onContextMenuClosed(Menu menu)
其中,参数menu为传入的菜单。示例:
@Override
public void onContextMenuClosed(Menu menu){
Toast.makeText(getApplicationContext(),"你退出了上下文菜单!",
Toast.LENGTH_LONG).show();
return super.onContextMenuClosed(menu);
}