Android-Menu的基本使用

所谓Menu有什么用的?当然是为了节省界面的空间,让屏幕的空间得到合理的利用,Menu有两种,一种是options menu,一种是Context Menu。
一、options Menu
1、在res目录下创建menu文件夹,然后在该文件夹中创建一个新的Menu Resource File,比如叫main。
2、在main.xml中书写所需要的代码。
(1)每一个Menu的菜单项,都使用一个<item>标签来包裹。
(2)通过android:id来给每一个菜单项指定一个唯一的标识符
(3)通过android:titile来个每一个菜单项指定一个名称

<item android:id="@+id/item_add"
    android:title="@string/str_addItem"/>

<item android:id="@+id/item_delete"
    android:title="@string/str_deleteItem"/>

3、到对应的Activity中重写相对应的方法。
(1)重写onCreateOptionsMenu()方法。

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main,menu);
    return true;
}

在该方法中通过getMenuInflater()方法获得MenuInflater对象,然后再调用inflate()方法来给当先的Activity创建菜单。其中,inflate()方法传入两个参数,第一个是我们要用来创建菜单的资源文件,比如前面的main.xml,第二个是用于制动菜单创建到哪一个Menu对象中,这里我们可以直接使用onCreateOptionsMenu()方法中传入的menu参数。最后,给这个方法返回true表示允许菜单显示,如果返回false,则创建的菜单无法显示。
(2)重写onOptionsItemSelected()方法

public boolean onOptionsItemSelected(@NonNull MenuItem item) {

    switch (item.getItemId()){
        case R.id.item_add:
            Toast.makeText(this, "You Click Add Item!!", Toast.LENGTH_SHORT).show();
            break;
        case R.id.item_delete:
            Toast.makeText(this, "You Click Delete Item!!", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
    }
    return true;
}

最后,效果如下:


menu1.png
menu2.png
menu3.png

二、Context Menu
首先,第1,2步与options Menu一样,先创建以及编写资源文件。

3、到对应的Activity中去重写相对应的方法和逻辑。
(1)重写onCreateContextMenu()方法。
与options Menu一样,调用getMenuInflater()方法中的inflate()方法,inflate()中,同样需要传入2个参数,一个是要以哪个资源文件为模板去创建menu,另一个是把menu创建到哪里去。与options Menu不一样的是,Context Menu不需要return true。

@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        getMenuInflater().inflate(R.menu.context_menu,menu);
    }

(2)重写onContextItemSelected()的方法

@Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {

        switch (item.getItemId()){
            case R.id.item_hello:
                Toast.makeText(this, "You choose Hello", Toast.LENGTH_SHORT).show();
                break;
            case R.id.item_goodBye:
                Toast.makeText(this, "You choose goodBye", Toast.LENGTH_SHORT).show();
        }
        return true;
    }

(3)在onStart()方法中调用registerForContextMenu()

@Override
    protected void onStart() {
        registerForContextMenu(mContextMenuButton);
        super.onStart();
    }

(4)在onStop()中调用unregisterForContextMenu()

@Override
    protected void onStop() {
        unregisterForContextMenu(mContextMenuButton);
        super.onStop();
    }

(5)在需要显示出Context menu的控件中调用openContextMenu()

mContextMenuButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                openContextMenu(mContextMenuButton);
            }
        });

4、效果展示


context menu1.png

点击按钮出现Cntext Menu

context Menu2.png
context menu 3.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 使用方法:首先在 res 目录下新建一个 menu文件夹,在文件夹下再建一个名叫 main 的菜单文件。 main...
    i小灰阅读 710评论 0 1
  • 使用方法:首先在 res 目录下新建一个 menu文件夹,在文件夹下再建一个名叫 main 的菜单文件。 main...
    因为我的心阅读 399评论 0 0
  • 在活动中使用Menu 步骤: 在res目录下新建一个menu文件夹,接着在该文件夹下再新建一个名叫main的菜单文...
    Yolyn阅读 358评论 0 0
  • 前言 星光不问赶路人,时间不负有心人。 选项菜单和子菜单 Android应用中的菜单默认是看不见的,只有当用户按下...
    olaH阅读 705评论 0 3
  • 1、res -> New -> Directory,输入名字menu创建文件夹,右键menu -> New -> ...
    cjjjjjj阅读 691评论 0 0