基本的菜单类型有:
选项菜单(3.0后通过Action bar实现)
这一部分主要是作用于整个app的菜单选项,如搜索、设置等
创建选项菜单方法:
public boolean onCreateOptionsMenu(Menu menu) {
//设置样式
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
添加菜单按钮被点击时的响应,如果被响应了返回true 否则返回false
//菜单选项第一次显示时的回调函数,3.0以后Activity启动就调用该函数
public boolean onOptionsItemSelected(MenuItem mi){
switch(mi.getItemId()){
//对应的事件
}
return super.onOptionsItemSelected(mi);
}
除此之外还可通过setMenuItemClickListener()方法设置监听器xml中设置android:onclick属性。
上下文菜单
提供一些作用于特定控件或Fragment的操作,经常用在listVIew或GridView中。
实现方式有:
类型一:floating context menu 类似于对话框
创建上下文菜单:
1、为组件注册上下文菜单,如果是listView或GridView就是为它们的每一个Item注册。
TextView txt = (TextView)findViewById(R.id.tv_contextMenu);
//为控件注册上下文菜单
registerForContextMenu(txt);
2、重写onCreatContextMenu()
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// 设置上下文的样式
getMenuInflater().inflate(R.menu.context, menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
//上下文菜单被点击时触发的事件
public boolean onContextItemSelected(MenuItem mi){
switch(mi.getItemId()){
case R.id.green_it:
mi.setChecked(true);
txt.setBackgroundColor(Color.GREEN);
break;
case R.id.red_it:
mi.setChecked(true);
txt.setBackgroundColor(Color.RED);
break;
case R.id.blue_it:
mi.setChecked(true);
txt.setBackgroundColor(Color.BLUE);
break;
}
return true;
}
类型二:上下文操作模式(推荐)
弹出菜单
Action Bar
作用:
1.显示应用品牌
2.为应用程序提供导航操作,让用户更容易在不同Activity中切换
3.显示选项菜单
如果3.0之前的版本要使用Actionbar 就需要扩展包
在3.0以上版本Action Bar默认是启用的,如果不想用:
1.在代码中 getActionBar( ).hide( )隐藏Action Bar
2.引用一个不包含操作栏的主题
实现作用一:显示应用品牌 如左上角的微信logo和文字
- 把logo当做有先上功能的按钮,这个按钮也手机的返回按钮式有区别的,感觉在弱化菜单和返回按钮的功能,模仿io
actionBar.setHomeButtonEnabled(true);//logo可以像按钮一样点击
actionBar.setDisplayHomeAsUpEnabled(true);//设置先上导航功能
- 添加导航标签tab,经常与Fragment一起使用。
actionBar.addTab(actionBar.newTab().setText("好友").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("群聊").setTabListener(this));
- 下拉列表导航(结合spinner再补充)
- 自定义导航
可以在布局文件的Item节点中设置showAsAction属性或者setShowAsAction()方法设置
如果Action Bar没有足够的空间显示选项则这些选项会在overflow menu中出现
1.如果android设备支持菜单按钮,那么点击菜单按钮会显示overflow menu选项
2.不支持的话,Action Bar 右侧会有一个选项,点击它或者菜单选项按钮就会显示overflow menu
如果希望强制出现该按钮,可以在Activity的onCreat()方法中加入
try {
ViewConfiguration mconfig = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if(menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(mconfig, false);
}
} catch (Exception ex) {
}
该代码是检查设备是否支持菜单按钮,我们设置为不支持,那么就会Action Bar就会显示Overflow menu按钮了