菜单主要分为三类,选项菜单(Option Menu)、上下文菜单(Context Menu)和子菜单(Sub Menu)。
1.选项菜单Option Menu
当用户单击软件上的菜单按钮,触发事件弹出的菜单框就是选项菜单。如图:
布局为在res文件夹下新建一个menu文件夹,在此文件夹下建xml文件。
布局代码大致如下:
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><itemandroid:id="@+id/mune_enter"android:orderInCategory="100"android:title="选项一"app:showAsAction="never"/> <!-- 主要针对这个菜单的显示 --><itemandroid:id="@+id/mune_setting"android:orderInCategory="100"android:title="选项二"app:showAsAction="never"/><itemandroid:id="@+id/mune_out"android:orderInCategory="100"android:title="选项三"app:showAsAction="never"/></menu>
showAsAction主要针对这个菜单的显示,它有三个选项:
always:总是显示在界面上
never:不显示在界面上,只让出现在右边的三个点中
ifRoom:如果有位置才显示,不然就出现在右边的三个点中
Java代码:
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}//导入菜单布局public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}//点击菜单项的触发事件public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.mune_enter:Toast.makeText(this, "点击选项一", Toast.LENGTH_SHORT).show();break;case R.id.mune_setting:Toast.makeText(this, "点击选项二", Toast.LENGTH_SHORT).show();break;case R.id.mune_out:Toast.makeText(this, "点击选项三", Toast.LENGTH_SHORT).show();break;default:break;}return super.onOptionsItemSelected(item);}
}
2.上下文菜单Context Menu
当用户长按Activity页面时,弹出的菜单被称为上下文菜单。一般情况下ContextMenu常用于ListView或者GridView。如图:
布局大致如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public boolean onCreateOptionsMenu(Menu menu){
SubMenu fileMenu = menu.addSubMenu("查看");
SubMenu editMenu = menu.addSubMenu("输入");
//添加菜单项
fileMenu.add(1, 1, 1, "查看1");
fileMenu.add(1, 2, 1, "查看2");
fileMenu.add(1, 3, 1, "查看3");
editMenu.add(2, 1, 1, "输入1");
editMenu.add(2, 2, 1, "输入2");
editMenu.add(2, 3, 1, "输入3");
return super.onCreateOptionsMenu(menu);
}
//创建点击事件
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getGroupId() == 1) {
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "点击了查看1", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "点击了查看2", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "点击了查看3", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
} else if (item.getGroupId() == 2) {
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "点击了输入1", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "点击了输入2", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "点击了输入3", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
return super.onOptionsItemSelected(item);
}
}
JAVA代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public boolean onCreateOptionsMenu(Menu menu){
SubMenu fileMenu = menu.addSubMenu("查看");
SubMenu editMenu = menu.addSubMenu("输入");
//添加菜单项
fileMenu.add(1, 1, 1, "查看1");
fileMenu.add(1, 2, 1, "查看2");
fileMenu.add(1, 3, 1, "查看3");
editMenu.add(2, 1, 1, "输入1");
editMenu.add(2, 2, 1, "输入2");
editMenu.add(2, 3, 1, "输入3");
return super.onCreateOptionsMenu(menu);
}
//创建点击事件
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getGroupId() == 1) {
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "点击了查看1", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "点击了查看2", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "点击了查看3", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
} else if (item.getGroupId() == 2) {
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "点击了输入1", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "点击了输入2", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "点击了输入3", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
return super.onOptionsItemSelected(item);
}
}
3.子菜单Sub Menu
它就是将功能相同的操作进行分组显示,作用在选项菜单上,是选项菜单的二级菜单。如图:
子菜单的布局依靠代码实现,layout中并未体现。
JAVA代码:
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public boolean onCreateOptionsMenu(Menu menu){SubMenu fileMenu = menu.addSubMenu("查看");SubMenu editMenu = menu.addSubMenu("输入");//添加菜单项fileMenu.add(1, 1, 1, "查看1");fileMenu.add(1, 2, 1, "查看2");fileMenu.add(1, 3, 1, "查看3");editMenu.add(2, 1, 1, "输入1");editMenu.add(2, 2, 1, "输入2");editMenu.add(2, 3, 1, "输入3");return super.onCreateOptionsMenu(menu);
}
//创建点击事件
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getGroupId() == 1) {switch (item.getItemId()) {case 1:Toast.makeText(this, "点击了查看1", Toast.LENGTH_SHORT).show();break;case 2:Toast.makeText(this, "点击了查看2", Toast.LENGTH_SHORT).show();break;case 3:Toast.makeText(this, "点击了查看3", Toast.LENGTH_SHORT).show();break;default:break;}} else if (item.getGroupId() == 2) {switch (item.getItemId()) {case 1:Toast.makeText(this, "点击了输入1", Toast.LENGTH_SHORT).show();break;case 2:Toast.makeText(this, "点击了输入2", Toast.LENGTH_SHORT).show();break;case 3:Toast.makeText(this, "点击了输入3", Toast.LENGTH_SHORT).show();break;default:break;}}return super.onOptionsItemSelected(item);}}