Android  菜单
我们继续来进行学习,今天写一下在软件中用的还算较多的菜单。
1、Menu
菜单,很显然,作用就是点击不同的选项触发不同的方法。现在在安卓使用中推荐使用ActionBar,但这里我们还是对菜单进行一个简单的解释。
菜单主要分为三类,选项菜单(Option Menu)、上下文菜单(Context Menu)和子菜单(Sub Menu),下面我们就一个一个来看一下。
(1)选项菜单
当用户单击软件上的菜单按钮,触发事件弹出的菜单框就是选项菜单。
这是效果图
先是布局代码
布局为在res文件夹下新建一个menu文件夹,在此文件夹下建xml文件。
复制代码
 1 
 2 
复制代码
解释一下其中一些属性
showAsAction 主要是针对这个菜单的显示起作用的,它有三个可选项
always:总是显示在界面上
never:不显示在界面上,只让出现在右边的三个点中
ifRoom:如果有位置才显示,不然就出现在右边的三个点中
下面是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) {
        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)上下文菜单
 当用户长按Activity页面时,弹出的菜单被称为上下文菜单。一般情况下ContextMenu常用于ListView或者GridView。
效果图
先是布局文件
这里的布局就是下载layout中,父布局为FrameLayout
复制代码
 1 
 2 
 6 
 7     
11     
12 
13 
复制代码
这里没什么要说的,直接看下面。
java代码
复制代码
public class MainActivity extends AppCompatActivity {
    private ListView listview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //加载数据
        showListView();
        // 注册上下文菜单
        this.registerForContextMenu(listview);
    }
    //加载数据
    private void showListView() {
        listview = (ListView) findViewById(R.id.mune_list);
        ArrayAdapter adapter = new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, getDate());
        listview.setAdapter(adapter);
    }
    //创建数据源
    private ArrayList getDate() {
        ArrayList list = new ArrayList();
        for (int i = 0; i < 10; i++) {
            list.add("菜单" + i);
        }
        return list;
    }
    //添加上下文菜单的菜单项
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenu.ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("上下文菜单");
        //加载上下文菜单内容
        menu.add(1, 1, 1, "选项一");
        menu.add(1, 2, 1, "选项二");
        menu.add(1, 3, 1, "选项三");
        super.onCreateContextMenu(menu, v, menuInfo);
    }
    //创建单击事件
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case 1:
                Toast.makeText(this, "点击选项一", Toast.LENGTH_SHORT).show();
                break;
            case 2:
                Toast.makeText(this, "点击选项二", Toast.LENGTH_SHORT).show();
                break;
            case 3:
                Toast.makeText(this, "点击选项三", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
        return super.onContextItemSelected(item);
    }
}
复制代码
 (3)子菜单
它就是将功能相同的操作进行分组显示,作用在选项菜单上,是选项菜单的二级菜单
效果图
先上布局文件
其实布局文件中可以什么都没有
复制代码
 1 
 2 
 6 
 7     
12 
13 
复制代码
然后是java代码
复制代码
 1 public class MainActivity extends AppCompatActivity {
 2 
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.activity_main);
 7     }
 8     @Override
 9     public boolean onCreateOptionsMenu(Menu menu) {
10         SubMenu fileMenu = menu.addSubMenu("查看");
11         SubMenu editMenu = menu.addSubMenu("输入");
12         //添加菜单项
13         fileMenu.add(1, 1, 1, "查看1");
14         fileMenu.add(1, 2, 1, "查看2");
15         fileMenu.add(1, 3, 1, "查看3");
16         editMenu.add(2, 1, 1, "输入1");
17         editMenu.add(2, 2, 1, "输入2");
18         editMenu.add(2, 3, 1, "输入3");
19         return super.onCreateOptionsMenu(menu);
20     }
21     //创建点击事件
22     public boolean onOptionsItemSelected(MenuItem item) {
23         if (item.getGroupId() == 1) {
24             switch (item.getItemId()) {
25                 case 1:
26                     Toast.makeText(this, "点击了查看1", Toast.LENGTH_SHORT).show();
27                     break;
28                 case 2:
29                     Toast.makeText(this, "点击了查看2", Toast.LENGTH_SHORT).show();
30                     break;
31                 case 3:
32                     Toast.makeText(this, "点击了查看3", Toast.LENGTH_SHORT).show();
33                     break;
34                 default:
35                     break;
36             }
37         } else if (item.getGroupId() == 2) {
38             switch (item.getItemId()) {
39                 case 1:
40                     Toast.makeText(this, "点击了输入1", Toast.LENGTH_SHORT).show();
41                     break;
42                 case 2:
43                     Toast.makeText(this, "点击了输入2", Toast.LENGTH_SHORT).show();
44                     break;
45                 case 3:
46                     Toast.makeText(this, "点击了输入3", Toast.LENGTH_SHORT).show();
47                     break;
48                 default:
49                     break;
50             }
51         }
52         return super.onOptionsItemSelected(item);
53     }
54 }
复制代码
 
上面就是菜单的用法了。。。。。。。
说一下ContextMenu与OptionMenu的区别:
1、OptionMenu对应的是activity,一个activity只能拥有一个选项菜单;
2、ContextMenu对应的是view,每个view都可以设置上下文菜单;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~https://www.cnblogs.com/QY-admin/p/9974575.html