Menu分类:
1.选项菜单(OptionMenu)
选项菜单是一个应用的主菜单项,用于放置对应用产生全局影响的操作。
创建菜单:右键res--->New--->Android Resource Directory--->Resource type选择Menu--->右键Menu--->New--->Menu Resource File
所有的菜单项都叫做item,而所有包裹菜单项的都叫做Menu。
onCreateOptionsMenu(Menu menu):创建OptionMenu
上述方法中使用getMenuInflater().inflater(R.menu.option,menu):将菜单资源加载进来
getMenuInflater():返回一个MenuInflater对象。
android:icon "用于设置图标"
app:showAsAction:控制菜单项以多种形式显示(always:直接在标题栏显示,never:不直接在标题栏显示,withText:控制图标和文本一起显示,ifRoom:有空间就显示)
app:showAsAction="always":将菜单显示在菜单栏中
app:showAsAction="always|withText":将菜单和图标同时显示在菜单栏中
onOptionsItemSelected(MenuItem item):OptionMenu的选中方法
item.getItemId():获取菜单项对应id
注意:最多只能含有一级子菜单,即item中只能包含一层menu。
2.上下文菜单(ContextMenu):长按某个view不放,就会在屏幕中间弹出ContextMenu。
点击无效,需要长按才能出现效果。
注册时:将其与按钮绑定在一起用registerForContextMenu(findViewById(R.id.ID值));
创建时使用onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo)方法
菜单项的选择:利用onContextItemSelected()方法。
为按钮设置上下文操作模式(将原本出现在中间的界面操作出现在操作栏上):
①实现ActionMode CallBack
②在view的长按事件中去启动上下文操作模式
3.弹出菜单(PopupMenu)
一个模态形式展示的弹出风格的菜单,绑在某个View上,一般出现在被绑定的View的下方。
①实例化PopupMenu对象(参数二:被绑定的view)
例如:PopupMenu menu=new PopupMenu(OptionActivity.this,btn);
②加载菜单资源:利用MenuInflate将Menu资源加载到PopupMenu.getMenu()所返回的Menu对象中,将R.Menu.xx对应的菜单资源加载到弹出式菜单中(将参数一加载到参数二中)
例如:menu.getMenuInflater().inflate(R.menu.popup,menu.getMenu());
③为PopupMenu设置点击监听器(用setOnMenuItemClickListener()方法)
④显示PopupMenu(千万不能忘记)
利用show()方法。
Menu创建的方式:
1.通过xml定义
2.通过java定义
没有子菜单的利用add(int i,int i1,int i2,CharSequence charSequence)方法,参数一:组id,参数二:菜单项id,参数三:序号,菜单四:菜单项上的文本
含有子菜单的利用addSubMenu(int i,int i1,int i2,CharSequence charSequence)方法,参数一:组id,参数二:菜单项id,参数三:序号,菜单四:菜单项上的文本。返回一个SubMenu类型的数据。
子菜单同样利用add(int i,int i1,int i2,CharSequence charSequence)方法,参数一:组id,参数二:菜单项id,参数三:序号,菜单四:菜单项上的文本
xml定义Menu的优势:
1.清晰的菜单结构
2.将菜单内容与应用的逻辑代码分离
3.资源适配更容易
Menu显示:
1.onCreateOptionsMenu()方法必须返回true,否则无法显示
2.onOptionsItemSelected()方法返回true,代表操作结束,该方法调用父类的默认实现(super.onOptionsItemSelected(item))
3.调用父类的默认实现