菜单栏的创建

menu在Activity中是非常常见的, 那么如何写一个menu呢?
在Android中menu有三种:
1. OptionsMenu 主菜单
2. ContextMenu 上下文菜单
3. PopupMenu 弹出菜单

OptionMenu

  1. 首先创建一个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">
    <!--
    showAsAction  可以使它在菜单栏上显示
    icon : 为菜单栏上的功能设置图片
-->
    <item
        android:title="@string/Settings"
        android:id="@+id/action_settings"
        />
    <item
        android:title="@string/help"
        android:id="@+id/action_help"
        app:showAsAction="always"
        android:icon="@mipmap/ic_launcher"
        />
</menu>
  1. 将菜单加载到布局上, 就需要重写方法
  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //getMenuInflater 用于将xml文件, 添加到menu中
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
    }
  1. 再对item设置点击事件, 实现跳转等功能的实现
   @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemId = item.getItemId();
        switch (itemId){
            case R.id.action_settings:
                // TODO: 处理菜单点击事件
                Toast.makeText(MainActivity.this, "设置被点击了", Toast.LENGTH_SHORT).show();
                break;
            case R.id.action_help:
                Intent intent = new Intent(this, helpActivity.class);
                startActivity(intent);
        }
        return true;
    }

ContextMenu

ContextMenu主要是针对一个控件, 常用于ListView和GridView. 例如:对ListView中的一条item进行一系列的动作, 都可以通过ContextMenu来进行, 只要定义menu的行为(即 为menu中的条目设置id, 通过id找到, 并进行操作), 再重写onContextItemSelected方法就可以了.
menu的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/action_copy"
        android:title="@string/helping"
        />

</menu>

设置点击事件要重写的方法:

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        //通过id找到
            case R.id.action_copy:
                // TODO:复制
                //上下文菜单的附加信息, 只有在ListView和GridView中才可以使用
                //ContextMenuInfo 得到当前item的信息
                ContextMenu.ContextMenuInfo menuInfo = item.getMenuInfo();
                      AdapterView.AdapterContextMenuInfo adapterContextMenuInfo =
                        (AdapterView.AdapterContextMenuInfo) menuInfo;
                //得到item中的数据信息, 如果不进行上一步的强转就无法得到position
                String s = strings.get(adapterContextMenuInfo.position);
                Toast.makeText(helpActivity.this, "复制", Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }

PopupMenu

弹出菜单, 即 我们点击某一个控件会弹出菜单的一种方式. 它的xml布局和之前的相同, 就不多说啦.
它要显示在哪个Activity上, 点击哪个控件时会弹出, 都是这个菜单所要设置的.
首先我们要设置一个显示的方法, 代码是这个样子哒:

    public void btnShowPopupMenu(View view) {
        //第二个参数, 代表弹出菜单在哪个控件上显示
        PopupMenu popupMenu = new PopupMenu(this, view);
       //填充
        popupMenu.getMenuInflater()
                .inflate(R.menu.seetings_popup_menu, popupMenu.getMenu());
           popupMenu.setOnMenuItemClickListener(this);
        popupMenu.show();
    }

另外还要设置点击事件, 即 我们点击这个菜单上的某一项功能时的具体实现. 这里只是弹出了一个Toast, 没有什么具体的操作, 大家了解就好.
代码是这个样子哒:

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()){
            case R.id.action_copy:
                Toast.makeText(SeetingsActivity.this, "success", Toast.LENGTH_SHORT).show();
                break;
        }
        return false;
    }

三种形式的菜单栏就介绍完了, 有什么不正确的地方还请大神们指正.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值