菜单
- 选项菜单
- 快捷菜单
- 子菜单
选项菜单
一般位于Activity中标题右侧
方法一-xml布局文件创建:
在Android Studio中创建选项菜单:在res文件夹上右击new,按一下操作
然后选择创建的menu文件右击创建menu resource file,然后选择Menu item拖到右上角
在MainActivity中覆写onCreateOptionsMenu()方法,对菜单进行初始化
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//getMenuInflater用来实例化整个布局文件
//inflate将资源加载到menu对象中
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { //选择监听事件
switch (item.getItemId()){
case R.id.Item1:
textView.setText("selected"+ item.getTitle()); //获取改菜单项文本内容
case R.id.Item2:
textView.setText("selected"+ item.getTitle()); //获取改菜单项文本内容
case R.id.Item3:
textView.setText("selected"+ item.getTitle()); //获取改菜单项文本内容
}
return false; //表示还有其他事件要处理
}
方法二-代码创建:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//设置groupId,ItemId,次序,标题
menu.add(0,1,0,"menu1");
menu.add(0,2,1,"menu2");
menu.add(0,3,2,"menu3");
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { //选择监听事件
switch (item.getItemId()){
case 1:
textView.setText("selected"+ item.getTitle());
case 2:
textView.setText("selected"+ item.getTitle());
case 3:
textView.setText("selected"+ item.getTitle());
}
return false; //表示还有其他事件要处理
}
快捷菜单
当用户点击界面超过两秒后,将启动到该界面元素的快捷菜单
需要重载:onCreateContextMenu()函数、 onContextItemSelected()函数
快捷菜单注册到界面中的某个控件上:registerForContextMenu()函数
//重写上下文菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.menu,menu); //将资源加载到菜单项中
}
@Override
public boolean onContextItemSelected( MenuItem item) {
switch (item.getItemId()){
case R.id.Item1:
textView.setText("selected:"+item.getTitle());
case R.id.Item2:
textView.setText("selected:"+item.getTitle());
case R.id.Item3:
textView.setText("selected:"+item.getTitle());
}
return false;
}
最后需要在onCreate方法中将listView注册到快捷菜单:
registerForContextMenu(listView);
子菜单
就是二级菜单,点击选项菜单或者快捷菜单中的菜单项就可以打开子菜单
如图:先选中一个菜单项,拖一个menu进去,再拖一个Meun Item选项进去,再改变标题和id
具体操作:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//添加子菜单资源
menu.addSubMenu(0,1,0,"menu1").add(1,11,10,"menu1.1");
menu.addSubMenu(0,1,0,"menu1").add(1,11,10,"menu1.2");
return true;
}
其他操作与以上两种菜单一样