Android中的菜单包括:OptionsMenu(选项菜单)
ContextMenu(上下文菜单)
PopMenu(弹出式菜单)
PopupWindow(弹出式窗口)
1、OptionsMenu(选项菜单)的使用
/**
* 使用选项菜单的步骤:
* 1、复写Activity的onCreateOptinisMenu方法创建选项菜单
* 2、填充菜单内容有两种方式:
* 2.1 通过菜单填充器MenuInfater将指定的菜单xml文件填充到某一menu对象中
* #菜单xml文件:在res文件夹中创建menu文件夹,在此文件夹中创建menu配置文件
* 2.2 通过menu对象的addItem方法动态添加某一菜单条目
* 3、复写Activity的onOptionsItemSelected方法实现菜单Item的点击事件
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
/*
* 使用menu对象的add方法动态添加一个Item
* 第二个参数是item的id值
* 第四个参数是item的title
*/
menu.add(Menu.NONE, 1, Menu.NONE, "Dynamic 1");
menu.add(Menu.NONE, 2, Menu.NONE, "Dynamic 2");
menu.add(Menu.NONE, 3, Menu.NONE, "Dynamic 3");
//1 获取MenuInflater对象
MenuInflater inflater = getMenuInflater();
//2 将menu的xml配置文件填充到menu对象中
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "Dynamic 1被点击", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "Dynamic 2被点击", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "Dynamic 3被点击", Toast.LENGTH_SHORT).show();
break;
case R.id.red:
text.setTextColor(Color.RED);
break;
case R.id.green:
text.setTextColor(Color.GREEN);
break;
case R.id.blue:
text.setTextColor(Color.BLUE);
break;
case R.id.exit:
finish();
break;
}
return super.onOptionsItemSelected(item);
}
menu的xml配置文件写法:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!--每一个item就是菜单栏中的一个条目-->
<!--一个item必须包含id和title-->
<item
android:id="@+id/color"
android:title="选择颜色">
<menu>
<group>
<item
android:id="@+id/red"
android:title="红色" />
<item
android:id="@+id/green"
android:title="绿色" />
<item
android:id="@+id/blue"
android:title="蓝色" />
</group>
</menu>
</item>
<item
android:id="@+id/exit"
android:title="退出" />
</menu>
2、ContextMenu(上下文菜单)的使用
/**
* 使用上下文菜单的步骤:
* 1、复写Activity的onCreateContextMenu,创建上下文菜单选项
* 2、复写Activity的onContextItemSelected方法拦截菜单Item的点击事件
* 3、调用registerForContextMenu(View)方法将上下文菜单注册到指定的View上,
* 长按所注册View视图,会触发上下文菜单弹出
*/
/**
* 第一个参数:ContextMenu类型,就是当前Activity所显示的上下文菜单
* 第二个参数:调用registerForContextMenu时所注册View对象
* 第三个参数:ContextMenuInfo系统生成对ContextMenu的描述类,假如注册的是AdapterView,
* 则此ContextMenuInfo实质上AdapterContextMenuInfo类型,通过此类型可以获取用户
* 长按的是哪一个AdapterView中的item
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
int position = info.position;
String content = (String) listView.getItemAtPosition(position);
//设置menu的标题
menu.setHeaderTitle("地区简介:"+ content);
//给menu动态添加item
menu.add(Menu.NONE, 1, Menu.NONE, "天气");
menu.add(Menu.NONE, 2, Menu.NONE, "风景");
menu.add(Menu.NONE, 3, Menu.NONE, "美食");
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "天气被点击", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "风景被点击", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "美食被点击", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onContextItemSelected(item);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = ((ListView) findViewById(R.id.listView));
registerForContextMenu(listView);
}
3、 PopMenu(弹出式菜单)的使用
/**
* PopMenu的使用步骤:
* 1、直接new PopMenu,需要指定所依赖的View对象
* 2、通过MenuInflater给PopMenu中的Menu对象填充显示内容
* 3、实现PopMenu的Item点击事件
* 4、调用PopMenu.show方法显示PopMenu
*
*/
private void showPopMenu(final View view) {
//1、 创建PopMenu,并指定锚
PopupMenu popupMenu = new PopupMenu(this,view);
//2、填充PopMenu的item
getMenuInflater().inflate(R.menu.main,popupMenu.getMenu());
//3、设置item的点击事件
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
/**
* 当PopMenu中的每一个Item被点击时,此方法被回调
*/
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.width:
Toast.makeText(MainActivity.this, "width is "
+ view.getWidth(), Toast.LENGTH_SHORT).show();
break;
case R.id.height:
Toast.makeText(MainActivity.this, "height is "
+ view.getHeight(), Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return false;
}
});
popupMenu.show();
}