android_menu

摘要:
菜单:应用程序不可或缺的重要组成部分,贯穿整个应用程序;Android菜单分为三种类型:选项菜单、上下文菜单和弹出菜单;OptionMenu对应于一个活动。一个活动只能有一个OptionMenu、ContextMenu,而事件view活动中与PopupMenu对应的每个视图都可以有一个相应的ContextMenu、PopupMenu;您可以在xml文件中编辑菜单(推荐),或使用Java代码编辑菜单;1: 渲染选项菜单:创建选项菜单:1.xml菜单文件编写

 菜单(Menu):是app中不可缺少的重要组成部分,贯穿整个app;

Android菜单分为3中类型:选项菜单(OptionMenu),上下文菜单(ContextMenu),弹出菜单(PopupMenu);

  OptionMenu 对应的是一个activity,一个activity只能有一个OptionMenu,ContextMenu,PopupMenu对应的事VIew

  activity中得每一个View都可以有对应的ContextMenu,PopupMenu;

可以在xml文件中进行菜单的编辑(推荐),也可以使用Java代码进行菜单的编辑(除非有特殊要求);

一:选项菜单(OptionMenu)

效果图:

android_menu第1张

android_menu第2张

 选项菜单的创建:

  1.xml菜单文件编写

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

    <item
        android:id="@+id/app_bar_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="查找"
        app:showAsAction="collapseActionView|ifRoom" />
    <item
        android:id="@+id/it_new"
        android:title="新建" />
    <item
        android:id="@+id/it_save"
        android:title="保存" />
    <item
        android:id="@+id/it_more"
        android:title="更多" >
        <menu >
            <item
                android:id="@+id/it_rename"
                android:title="重命名" />
            <item
                android:id="@+id/it_delete"
                android:title="删除" />
        </menu>
    </item>
</menu>

  其中ShowAsAction是菜单的显示方式:always 始终显示在界面上  never 不显示在界面上,显示在(...)的列表中 

                   ifRoom 有空间则显示在界面上,没有则显示在列表中,

  2.在Java代码中重写OnCreatOptionMenu;

 //创建OptionMenu
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //加载菜单资源,参数1:菜单资源索引 参数2:所要绑定菜单的对象
        getMenuInflater().inflate(R.menu.option, menu);
        //记得return true 否者菜单无法显示
        return true;
    }

  3..重写 onOptionItemSelected  设置点击事件

 //OptionMenu菜单选中项的方法
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
//        item.getItemId(); 获取选中项ID
        switch (item.getItemId()) {
            case R.id.app_bar_search:
                Toast.makeText(MainActivity.this, "查找", Toast.LENGTH_LONG).show();
                break;
            case R.id.it_new:
                Toast.makeText(MainActivity.this, "新建", Toast.LENGTH_LONG).show();
                break;
            case R.id.it_delete:
                Toast.makeText(MainActivity.this, "删除", Toast.LENGTH_LONG).show();
                break;
            case R.id.it_more:
                Toast.makeText(MainActivity.this, "更多", Toast.LENGTH_LONG).show();
                break;
            case R.id.it_rename:
                Toast.makeText(MainActivity.this, "重命名", Toast.LENGTH_LONG).show();
                break;
            case R.id.it_save:
                Toast.makeText(MainActivity.this, "保存", Toast.LENGTH_LONG).show();

        }
        return super.onOptionsItemSelected(item);
    }

 二:上下文菜单(ContextMenu)

  1.xml菜单编写,新建xml文件(),可以是多个View对应不同的xml,也可以相同的xml

  2.在Java中注册对应的view

 //1.注册contextMenu,与控件进行绑定
        registerForContextMenu(findViewById(R.id.button1));

  3.重写OnCreatContextMenu

//覆盖onCreateContextMenu
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        //加载菜单资源
        getMenuInflater().inflate(R.menu.context_menu, menu);
    }

  4.重写OnContextItemSelected  设置点击事件

   //f覆盖onContextItemSelected
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.ct_copy:
                Toast.makeText(MainActivity.this, "复制", Toast.LENGTH_LONG).show();
                break;
            case R.id.ct_delete:
                Toast.makeText(MainActivity.this, "删除", Toast.LENGTH_LONG).show();
                break;
            case R.id.ct_rename:
                Toast.makeText(MainActivity.this, "重命名", Toast.LENGTH_LONG).show();
                break;
        }
        return super.onContextItemSelected(item);
    }

  为按钮设置上下文操作模式:在顶部进行上下文操作

  1.实现ActionMode CallBack

     //①实现ActionMde CallBack,实例化对象
        ActionMode.Callback cb = new ActionMode.Callback() {
        //创建,在启动上下文模式操作(startActionMode(CallBack))时调用
        @Override
        public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
            getMenuInflater().inflate(R.menu.context_menu,menu);
            return true;
        }
        //在创建方法后被调用
        @Override
        public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
            return false;
        }
        //菜单项操作
        @Override
        public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
            switch (menuItem.getItemId()) {
                case R.id.ct_copy:
                    Toast.makeText(MainActivity.this, "复制", Toast.LENGTH_LONG).show();
                    break;
                case R.id.ct_delete:
                    Toast.makeText(MainActivity.this, "删除", Toast.LENGTH_LONG).show();
                    break;
                case R.id.ct_rename:
                    Toast.makeText(MainActivity.this, "重命名", Toast.LENGTH_LONG).show();
                    break;
            }
            return false;
        }
        //操作模式结束时调用,操作栏消失即调用
        @Override
        public void onDestroyActionMode(ActionMode actionMode) {

        }
    };

  2.为view添加长按操作,启动上下文操作模式

 ②在View的长按中启动上下文操作模式
           findViewById(R.id.button2).setOnLongClickListener(new View.OnLongClickListener() {
               @Override
               public boolean onLongClick(View view) {
                   startActionMode(cb);//启动上下文操作模式
                   return false;
               }
           });

三:弹出菜单,在View的下方显示

  1.同样建立xml 菜单文件

  2.在Java中为View添加点击事件

//button3 演示popup menu
          final Button  button = findViewById(R.id.button3);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //1.实例化popupMenu对象 参数1.环境上下文 参数2,popupMenu依附的控件,出现在哪个控件的下方
                    PopupMenu pm = new PopupMenu(MainActivity.this,button);
                    //2.加载菜单资源,利用MenuInflater
                    pm.getMenuInflater().inflate(R.menu.popur,pm.getMenu());
                    //3.为PopupMenu创建监听器
                    pm.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                        @Override
                        public boolean onMenuItemClick(MenuItem menuItem) {
                            switch (menuItem.getItemId()) {
                                case R.id.pp_copy:
                                    Toast.makeText(MainActivity.this, "复制", Toast.LENGTH_LONG).show();
                                    break;
                                case R.id.pp_delete:
                                    Toast.makeText(MainActivity.this, "删除", Toast.LENGTH_LONG).show();
                                    break;
                            }
                            return false;
                        }
                    });
                    //4.千万不要忘了这一步
                    pm.show();
                }
            });

  注意:最后要调用show()方法,否则菜单无法显示

 上面都是通过建立xml菜单资源文件,进行调用建立菜单,下面使用Java代码进行菜单的编写

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //参数1:组Id 参数2:菜单Id  参数3:菜单在列表中显示的序号id 参数4:菜单提示
        menu.add(1,101,1,"查找");
        menu.add(1,102,1,"新建");
        SubMenu sub = menu.addSubMenu(1,103,3,"更多");
        sub.add(2,201,1,"复制");
        sub.add(2,202,2,"粘贴");
        return true;
    }

  在进行点击事件的创建时,只需要将viewid改成菜单id即可

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
//        item.getItemId(); 获取选中项ID
        switch (item.getItemId()) {
            case 101:
                Toast.makeText(MainActivity.this, "查找", Toast.LENGTH_LONG).show();
                break;
            case 102:
                Toast.makeText(MainActivity.this, "新建", Toast.LENGTH_LONG).show();
                break;
    }
}

免责声明:文章转载自《android_menu》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Struts2 06--系统拦截器防止数据重复提交Sort函数(C++)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

wpf 右键ListBox可编辑

之前wpf项目用到listbox右键编辑的功能,想到当时找资料不好找,特地将自己的结果拿出来与大家分享,探讨。 首先添加一个listbox。  <ListBox x:Name="List_lianxiren" MouseDown="List_lianxiren_MouseDown"  SelectionMode="Extended" Margin="...

WebView2简单试用(八)—— 右键菜单

默认菜单: WebView2本身携带了类似Edge的右键菜单,但有的时候我们需要对它进行一些修改。 禁止dev菜单     webView.CoreWebView2.Settings.AreDevToolsEnabled = false; 禁止所有菜单     webView.CoreWebView2.Settings.AreDefaultConte...

京东阅读(web)体验优化

京东有电子书可以购买,可以多端阅读。比如PC客户端,移动端,以及本文提到的PC网站端。 先换个镜头,读书要记笔记(电子版本), 方便以后查阅。 镜头换回来,但是,我们为了方便肯定是想复制,下载啊,分享啊等,但是服务商一般是不允许你这么做的。 我了,在京东买了几本书,程序相关的,为了获取好的体验,在PC网站端阅读, 发现精彩之处,想去复制到笔记里面去。 结果...