菜单:
1.Options menu and action bar 选项菜单
2.Context menu 上下文菜单
3.Popup menu 弹出式菜单
1.Options menu and action bar 选项菜单
创建选项菜单步骤:
1.覆盖Activity 的onCreateOptionMenu(Menu menu)方法,当菜单第一次被打开时调用
2.调用Menu的add()方法添加菜单项(MenuItem),同时可以调用MenuItem的setIcon()方法来为菜单项设置图标
3.当菜单项(MenuItem)被选择时,覆盖Activity的onOptionsItemSelected(MenuItem item)来响应事件action bar
***资源文件名必须全用小写,可以用下划线隔开,不能数字开头
MainActivity.java
package com.example.hello;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final int START_ITEM = Menu.FIRST;
private static final int OVER_ITEM = Menu.FIRST + 1;
private static final int SET_ITEM1 = Menu.FIRST + 2;
private static final int SET_ITEM2 = Menu.FIRST + 3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//重写onCreateOptionsMenu方法
@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);
// 添加菜单项(组id,菜单id,排序,标题)
menu.add(0, START_ITEM, 100, "开始");
menu.add(0, OVER_ITEM, 200, "结束");
// 添加子菜单
SubMenu sub1 = menu.addSubMenu("设置");
sub1.add(1, SET_ITEM1, 300, "设置声音");
sub1.add(1, SET_ITEM2, 300, "设置桌面");
System.out.println("onCreateOptionsMenu...");
return true;
}
// 重写onOptionItemSelected方法实现菜单选项事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
System.out.println("onOptionsItemSelected...");
switch (item.getItemId()) {
case START_ITEM:
// R.id.start:
// 弹框,提示信息
Toast.makeText(this, "开始游戏", Toast.LENGTH_SHORT).show();
break;
case OVER_ITEM:
// R.id.over:
Toast.makeText(this, "结束游戏", Toast.LENGTH_SHORT).show();
break;
case SET_ITEM1:
// R.id.over:
Toast.makeText(this, "设置声音", Toast.LENGTH_SHORT).show();
break;
case SET_ITEM2:
// R.id.over:
Toast.makeText(this, "设置桌面", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
2..Context menu 上下文菜单
1.覆盖Activity 的onCreateContextMenu(Menu menu)方法,调用Menu的add()方法添加菜单项(MenuItem)
2.覆盖Activity的onCreatetextItem Selected(Menu menu)来响应事件
3.调用registerForContextMenu()方法为视图注册上下文菜单
mainActivity2.java
package com.example.hello;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Button;
import android.widget.Toast;
//上下文菜单
public class MainActivity2 extends Activity {
private Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
// 获取BUTTON对象
btn1 = (Button) findViewById(R.id.button1);
//在button上注册上下文菜单
registerForContextMenu(btn1);
}
// 创建上下文菜单的方法
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.main2, menu);
}
// 上下文触发事件
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.start:
Toast.makeText(this, "开始",Toast.LENGTH_SHORT).show();
break;
case R.id.over:
Toast.makeText(this, "结束",Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onContextItemSelected(item);
}
}
3.Popup menu 弹出式菜单
弹出式菜单是在API 11级或更高级才有效
mainActivity3.java
package com.example.hello;
import android.app.Activity;
import android.os.Bundle;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.Toast;
public class mainActivity3 extends Activity implements android.widget.PopupMenu.OnMenuItemClickListener {
private Button btn1;
//弹出式菜单
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main3);
}
public void showPopupMenu(View v){
//创建弹出式菜单对象
PopupMenu popup = new PopupMenu(this,v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.main3,popup.getMenu());
//设置菜单项的单击事件
popup.setOnMenuItemClickListener(this);
popup.show();
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.copy:
Toast.makeText(this, "复制", Toast.LENGTH_LONG).show();
break;
case R.id.del:
Toast.makeText(this, "删除", Toast.LENGTH_LONG).show();
break;
default:
break;
}
return false;
}
}