(一)选项菜单
1、简单的创建菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// 添加菜单
menu.add("菜单选项1");
/*
* pram1:组号 pram2:唯一的ID号 pram3:排序号 pram4:标题
*/
menu.add(1, Menu.FIRST, Menu.FIRST, "菜单选项2");
// 希望显示菜单就返回true
return true;
}
2、菜单的分组以及简单属性:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
int group1 = 1;
int group2 = 2;
menu.add(group1, 1, 1, "item1");
menu.add(group1, 2, 2, "item2");
menu.add(group2, 3, 3, "item3");
menu.add(group2, 4, 4, "item4");
// menu.removeGroup(group1);//删除一个组
// menu.setGroupVisible(group1, false);//设置可见性
// menu.setGroupEnabled(group2, false);//设置是否可点
// menu.setGroupCheckable(group2, true, t);//设置一组菜单的勾选情况
return true;
}
3、响应菜单
一、通过onOptionsItemSelected方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 响应每个菜单项(通过菜单项的ID)
switch (item.getItemId()) {
case 1:
// do something here
break;
case 2:
// do something here
break;
case 3:
// do something here
break;
case 4:
Toast.makeText(this, "hello", 0).show();
break;
default:
// 对没有处理的事件,交给父类来处理
return super.onOptionsItemSelected(item);
}
//返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了
return true;
}
二、通过监听
//第一步:创建监听器类
class MyMenuItemClickListener implements OnMenuItemClickListener {
@Override
publicboolean onMenuItemClick(MenuItem item) {
// do something here...
return true; //finish handling
}
}
//第二步:为菜单项注册监听器
menuItem.setOnMenuItemClickListener(new MyMenuItemClickListener());
三、通过Intent
(二)子菜单subMenu
注意:Menu可以包含多个SubMenu及menuItem,SubMenu可以包含多个MenuItem,,但是SubMenu不能包含SubMenu。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//一个menu中可以添加多个子菜单
SubMenu subMenu=menu.addSubMenu(1,1, 0, "子菜单");
//在子菜单中添加多个菜单选项
MenuItem menuItem1=subMenu.add(1, 1, 0, "菜单选项1");
subMenu.add(1, 2, 1,"菜单选项2");
subMenu.add(1, 3, 2,"菜单选项3");
subMenu.add(1, 4, 3,"菜单选项4");
//子菜单不支持显示图标,尽管这样设置不会报错
subMenu.setIcon(R.drawable.ic_launcher);
//设置菜单选项的图标
menuItem1.setIcon(R.drawable.ic_launcher);
return true;
}
(三)上下文菜单ContextMenu
package com.zzw.contextMenu;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
simpleShowList();
//1.在activity的onCreate方法中为一个view注册上下文菜单
this.registerForContextMenu(listView);
}
//2.在onCreateContextMenu中生成上下文菜单。
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
Log.d(TAG, "onCreateContextMenu_start");
menu.setHeaderTitle("上下文菜单标题");
menu.add(0, 1, 0, "选项1");
menu.add(0, 2, 0, "选项2");
menu.add(0, 3, 0, "选项3");
Log.d(TAG, "onCreateContextMenu_stop");
}
//3.在onContextItemSelected中响应上下文菜单项。
@Override
public boolean onContextItemSelected(MenuItem item) {
Log.d(TAG, "onContextItemSelected_start");
int item_id = item.getItemId();
switch (item_id) {
case 1:
Toast.makeText(this, "我是上下文菜单选项1", 0).show();
break;
case 2:
break;
case 3:
break;
default:
return super.onContextItemSelected(item);
}
Log.d(TAG, "onContextItemSelected_stop");
return true;
}
private void simpleShowList() {
Log.d(TAG, "simpleShowList_start");
String[] showList = { "显示1", "显示2", "显示3", "显示4" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_expandable_list_item_1, showList);
listView.setAdapter(adapter);
Log.d(TAG, "simpleShowList_stop");
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/b4e57a7c7063b8175c8ac63061ed0c15.png)
(四)通过XML文件添加菜单
1.在res文件下创建menu文件夹,一般默认有的,在里面new出一个Android xml File来编辑自己的菜单
2.编辑自己的xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- group是分组 -->
<group android:id="@+id/group1" >
<!-- item是一个菜单选项 -->
<item
android:id="@+id/item1"
android:title="菜单选项1(子菜单)">
<!-- 在一个item中添加一个menu就是子菜单 -->
<menu>
<!-- 子菜单中的菜单选项 -->
<item
android:icon="@drawable/ic_launcher"
android:id="@+id/item1_1"
android:title="子菜单内选项1"/>
<item
android:id="@+id/item1_2"
android:title="子菜单内选项2"/>
</menu>
</item>
<item
android:id="@+id/item2"
android:title="菜单选项2">
</item>
</group>
<group android:id="@+id/group2" >
<item
android:id="@+id/item3"
android:title="菜单选项4">
</item>
<item
android:id="@+id/item4"
android:title="菜单选项5">
</item>
</group>
</menu>
3.在activity中获取:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater in = getMenuInflater();
in.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
13 break;
case R.id.item2:
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
![](https://i-blog.csdnimg.cn/blog_migrate/abc867db8a9c94525df958257d0e2c0b.png)
一些基本的属性:
设置菜单icon
1 <item 2 android:id="@+id/item1" 3 android:title="菜单选项1" 4 android:icon="@drawable/ic_launcher" 5 />
<!-- checkableBehavior设置可选 -->
<group android:id="@+id/group1"
android:checkableBehavior="all" >
<!-- checked设置特定菜单项(被勾中) -->
<item
android:id="@+id/item1"
android:title="菜单选项1"
>
</item>
<item
android:id="@+id/item2"
android:checked="true"
android:title="菜单选项2">
</item>
</group>
![](https://i-blog.csdnimg.cn/blog_migrate/b504c1edf7ac0fbda039f233b7ad2dce.png)
设置菜单可用不可用android:enable
<group android:id="@+id/group1">
<item
android:id="@+id/item1"
android:title="菜单选项1"
android:enabled="true"
>
</item>
<item
android:id="@+id/item2"
android:title="菜单选项2"
android:enabled="false">
</item>
</group>
![](https://i-blog.csdnimg.cn/blog_migrate/6de83b6fd90a3b0961b5c7b109d22b4c.png)
设置菜单选项是否可见android:visible
<group android:id="@+id/group1">
<item
android:id="@+id/item1"
android:title="菜单选项1"
android:visible="true"
>
</item>
<item
android:id="@+id/item2"
android:title="菜单选项2"
android:visible="false">
</item>
</group>
![](https://i-blog.csdnimg.cn/blog_migrate/27d9de0844468717f3d601c77d5cbe21.png)