Menu基本介绍实现
2016-05-27 22:59
393 查看
Activity类中的onCreateOptionsMenu事件方法用来创建选项菜单,该方法的定义如下:
public boolean onCreateOptionsMenu(Menu menu);
一般需要将创建选项菜单的代码放在onCreateOptionsMenu方法中,通过menu.add方法可以添加一个选项菜单项。该方法有4中重载形式:
public abstract MenuItem add(CharSequence title)
public abstract MenuItem add(int
titleRes)
public abstract MenuItem add(int
groupId, int itemId, int order,CharSequence title)
public abstract MenuItem add(int
groupId, int itemId, int order, int titleRes)
groupId:菜单项的分组ID,该参数一般用于带选项按钮的菜单。参数值可以是负整数、0和正整数。
itemId:当前添加的菜单项的ID。该参数值可以是负整数、0和正整数。
order:菜单显示顺序,参数值必须是0和正整数,不能为负整数,采用从左到右,从上到下显示。
title或者titleRes:菜单项标题的stringID或者字符串。
1.添加选项菜单项
[java] view
plain copy
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem addMenuItem = menu.add(1, 1, 1, "添加");
MenuItem okMenuItem = menu.add(1, 2, 2, "OK");
MenuItem deleteMenuItem = menu.add(1, 3, 3, "删除");
return true;
}
2.给选项菜单项添加图标
[java] view
plain copy
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem addMenuItem = menu.add(1, 1, 1, "添加");
MenuItem okMenuItem = menu.add(1, 2, 2, "OK");
MenuItem deleteMenuItem = menu.add(1, 3, 3, "删除");
return true;
}
3.关联Activity
[java] view
plain copy
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
MenuItem addMenuItem = menu.add(1, 1, 1, "添加");
MenuItem okMenuItem = menu.add(1, 2, 2, "OK");
MenuItem deleteMenuItem = menu.add(1, 3, 3, "删除");
addMenuItem.setIcon(R.drawable.add);
okMenuItem.setIcon(R.drawable.ok);
deleteMenuItem.setIcon(R.drawable.delete);
//将DeleteActivity与delete菜单项进行关联
deleteMenuItem.setIntent(new Intent(this, DeleteActivity.class));
return true;
}
4.响应菜单的单击动作
[java] view
plain copy
package cn.yh.menufirst;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.widget.Toast;
public class MainActivity extends Activity implements OnMenuItemClickListener{
private MenuItem addMenuItem;
private MenuItem okMenuItem;
private MenuItem deleteMenuItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
addMenuItem = menu.add(1, 1, 1, "添加");
okMenuItem = menu.add(1, 2, 2, "OK");
deleteMenuItem = menu.add(1, 3, 3, "删除");
addMenuItem.setIcon(R.drawable.add);
okMenuItem.setIcon(R.drawable.ok);
deleteMenuItem.setIcon(R.drawable.delete);
//给addMenuItem、deleteMenuItem和okMenuItem设置单击事件监听
addMenuItem.setOnMenuItemClickListener(this);
okMenuItem.setOnMenuItemClickListener(this);
deleteMenuItem.setOnMenuItemClickListener(this);
return true;
}
@Override
public boolean onMenuItemClick(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 1:
startActivity(new Intent(this, AddActivity.class));
break;
case 2:
startActivity(new Intent(this, OkActivity.class));
break;
case 3:
startActivity(new Intent(this, DeleteActivity.class));
break;
default:
break;
}
return true;
}
}
当在onMenuItemClick返回true时,则与菜单项关联的Activity失效。也就是说,系统调用单击事件方法后,就不会调用startActivity方法显示与菜单项相关联的Activity。如下:
[java] view
plain copy
package cn.yh.menufirst;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.widget.Toast;
public class MainActivity extends Activity implements OnMenuItemClickListener{
private MenuItem addMenuItem;
private MenuItem okMenuItem;
private MenuItem deleteMenuItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
addMenuItem = menu.add(1, 1, 1, "添加");
okMenuItem = menu.add(1, 2, 2, "OK");
deleteMenuItem = menu.add(1, 3, 3, "删除");
addMenuItem.setIcon(R.drawable.add);
okMenuItem.setIcon(R.drawable.ok);
deleteMenuItem.setIcon(R.drawable.delete);
//将DeleteActivity与delete菜单项进行关联
deleteMenuItem.setIntent(new Intent(this, DeleteActivity.class));
//给addMenuItem、deleteMenuItem和okMenuItem设置单击事件监听
addMenuItem.setOnMenuItemClickListener(this);
okMenuItem.setOnMenuItemClickListener(this);
deleteMenuItem.setOnMenuItemClickListener(this);
return true;
}
@Override
public boolean onMenuItemClick(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 1:
startActivity(new Intent(this, AddActivity.class));
break;
case 2:
startActivity(new Intent(this, OkActivity.class));
break;
case 3:
// startActivity(new Intent(this, DeleteActivity.class));
Toast.makeText(this, R.string.onMenuItemClickDelete, Toast.LENGTH_LONG).show();
break;
default:
break;
}
return true;
}
}
这时候:当单击delete菜单项时,只会提示R.string.onMenuItemClickDelete内容,而不会打开DeleteActivity。
5.使用Activity的onMenuItemSelected和onOptionsItemSelected方法来响应菜单项的单击事件
public boolean onMenuItemSelected(int featureId, MenuItem item);
public boolean onOptionsItemSelected(MenuItem item);
这两个方法都有一个item参数,用来传递被单击的菜单项的MenuItem参数对象。
public boolean onCreateOptionsMenu(Menu menu);
一般需要将创建选项菜单的代码放在onCreateOptionsMenu方法中,通过menu.add方法可以添加一个选项菜单项。该方法有4中重载形式:
public abstract MenuItem add(CharSequence title)
public abstract MenuItem add(int
titleRes)
public abstract MenuItem add(int
groupId, int itemId, int order,CharSequence title)
public abstract MenuItem add(int
groupId, int itemId, int order, int titleRes)
groupId:菜单项的分组ID,该参数一般用于带选项按钮的菜单。参数值可以是负整数、0和正整数。
itemId:当前添加的菜单项的ID。该参数值可以是负整数、0和正整数。
order:菜单显示顺序,参数值必须是0和正整数,不能为负整数,采用从左到右,从上到下显示。
title或者titleRes:菜单项标题的stringID或者字符串。
1.添加选项菜单项
[java] view
plain copy
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem addMenuItem = menu.add(1, 1, 1, "添加");
MenuItem okMenuItem = menu.add(1, 2, 2, "OK");
MenuItem deleteMenuItem = menu.add(1, 3, 3, "删除");
return true;
}
2.给选项菜单项添加图标
[java] view
plain copy
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem addMenuItem = menu.add(1, 1, 1, "添加");
MenuItem okMenuItem = menu.add(1, 2, 2, "OK");
MenuItem deleteMenuItem = menu.add(1, 3, 3, "删除");
return true;
}
3.关联Activity
[java] view
plain copy
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
MenuItem addMenuItem = menu.add(1, 1, 1, "添加");
MenuItem okMenuItem = menu.add(1, 2, 2, "OK");
MenuItem deleteMenuItem = menu.add(1, 3, 3, "删除");
addMenuItem.setIcon(R.drawable.add);
okMenuItem.setIcon(R.drawable.ok);
deleteMenuItem.setIcon(R.drawable.delete);
//将DeleteActivity与delete菜单项进行关联
deleteMenuItem.setIntent(new Intent(this, DeleteActivity.class));
return true;
}
4.响应菜单的单击动作
[java] view
plain copy
package cn.yh.menufirst;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.widget.Toast;
public class MainActivity extends Activity implements OnMenuItemClickListener{
private MenuItem addMenuItem;
private MenuItem okMenuItem;
private MenuItem deleteMenuItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
addMenuItem = menu.add(1, 1, 1, "添加");
okMenuItem = menu.add(1, 2, 2, "OK");
deleteMenuItem = menu.add(1, 3, 3, "删除");
addMenuItem.setIcon(R.drawable.add);
okMenuItem.setIcon(R.drawable.ok);
deleteMenuItem.setIcon(R.drawable.delete);
//给addMenuItem、deleteMenuItem和okMenuItem设置单击事件监听
addMenuItem.setOnMenuItemClickListener(this);
okMenuItem.setOnMenuItemClickListener(this);
deleteMenuItem.setOnMenuItemClickListener(this);
return true;
}
@Override
public boolean onMenuItemClick(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 1:
startActivity(new Intent(this, AddActivity.class));
break;
case 2:
startActivity(new Intent(this, OkActivity.class));
break;
case 3:
startActivity(new Intent(this, DeleteActivity.class));
break;
default:
break;
}
return true;
}
}
当在onMenuItemClick返回true时,则与菜单项关联的Activity失效。也就是说,系统调用单击事件方法后,就不会调用startActivity方法显示与菜单项相关联的Activity。如下:
[java] view
plain copy
package cn.yh.menufirst;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.widget.Toast;
public class MainActivity extends Activity implements OnMenuItemClickListener{
private MenuItem addMenuItem;
private MenuItem okMenuItem;
private MenuItem deleteMenuItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
addMenuItem = menu.add(1, 1, 1, "添加");
okMenuItem = menu.add(1, 2, 2, "OK");
deleteMenuItem = menu.add(1, 3, 3, "删除");
addMenuItem.setIcon(R.drawable.add);
okMenuItem.setIcon(R.drawable.ok);
deleteMenuItem.setIcon(R.drawable.delete);
//将DeleteActivity与delete菜单项进行关联
deleteMenuItem.setIntent(new Intent(this, DeleteActivity.class));
//给addMenuItem、deleteMenuItem和okMenuItem设置单击事件监听
addMenuItem.setOnMenuItemClickListener(this);
okMenuItem.setOnMenuItemClickListener(this);
deleteMenuItem.setOnMenuItemClickListener(this);
return true;
}
@Override
public boolean onMenuItemClick(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 1:
startActivity(new Intent(this, AddActivity.class));
break;
case 2:
startActivity(new Intent(this, OkActivity.class));
break;
case 3:
// startActivity(new Intent(this, DeleteActivity.class));
Toast.makeText(this, R.string.onMenuItemClickDelete, Toast.LENGTH_LONG).show();
break;
default:
break;
}
return true;
}
}
这时候:当单击delete菜单项时,只会提示R.string.onMenuItemClickDelete内容,而不会打开DeleteActivity。
5.使用Activity的onMenuItemSelected和onOptionsItemSelected方法来响应菜单项的单击事件
public boolean onMenuItemSelected(int featureId, MenuItem item);
public boolean onOptionsItemSelected(MenuItem item);
这两个方法都有一个item参数,用来传递被单击的菜单项的MenuItem参数对象。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories