文档章节

Android菜单使用小结

北ing
 北ing
发布于 2015/10/20 19:23
字数 836
阅读 32
收藏 0

1.菜单:
–系统菜单
—-onCreateOptionsMenu
–onOptionsItemSelected
—-为系统菜单添加图标
–上下文菜单:基于UI视图的
—-1.为UI视图注册上下文菜单:当在视图上长按时,会创建上下文菜单
—-2.重写onCreateContextMenu()
—-3.重写onContextItemSelected()
–弹出菜单(3.0开始出现)
—-自定义PopupMenu
—-给菜单添加菜单项

1)创建系统菜单

//menu接收的是系统创建的菜单对象
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        setIconEnable(menu,true);//让菜单项显示图标
        // 创建系统菜单
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    //选择系统菜单中某个菜单项的事件监听
    //item接收的是被选择的菜单项对象
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO 添加事件监听
        switch(item.getItemId())
        {
        case R.id.action_settings:
            startActivity(new Intent(Settings.ACTION_SETTINGS));
            break;
        case R.id.action_add:
            textView.setTextSize(textView.getTextSize()+5);
            break;
        case R.id.action_sub:
            textView.setTextSize(textView.getTextSize()-5);
            break;
        }
        return super.onOptionsItemSelected(item);
    }

如果想要给每个选项添加一个图标,需要调用下面的方法

//为系统菜单项添加图标 
    //enable为true时,菜单添加图标有效,enable为false时无效。4.0+系统默认无效 
        private void setIconEnable(Menu menu, boolean enable)  
        {  
            try   
            {  
                Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");  
                Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);  
                m.setAccessible(true); 
                //MenuBuilder实现Menu接口,创建菜单时,传进来的menu其实就是MenuBuilder对象(java的多态特征) 
                m.invoke(menu, enable);  

            } catch (Exception e)   
            {  
                e.printStackTrace();  
            }  
        }  

这里写图片描述

2)创建上下文菜单

 --为一个视图注册上下文菜单,长按该视图就会弹出菜单;
    //1:为UI视图注册上下文菜单--当在textView上长按时会去创建上下文菜单
registerForContextMenu(textView);

//2:创建上下文菜单
    //view接收的被注册的UI视图
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        // TODO 创建上下文菜单
        getMenuInflater().inflate(R.menu.main, menu);
        super.onCreateContextMenu(menu, v, menuInfo);
    }

//3:选中上下文菜单中某个菜单项的事件
    @Override
    public boolean onContextItemSelected(MenuItem item) {
......
}

3)PopupMenu:弹出菜单,3.0开始出现的,所以api最低为11,
//第二个参数是弹出菜单显示的参考位置,通常在参考视图的下边显示
//创建一个弹出菜单对象

    public void btnClick(View v)
    {
        PopupMenu  pop = new PopupMenu(this, v);//第二个参数是菜单显示位置的参照物,这里是一个按钮
        //给菜单添加菜单项
        getMenuInflater().inflate(R.menu.main, pop.getMenu());  
        //给菜单项添加事件监听
        pop.setOnMenuItemClickListener(new OnMenuItemClickListener() {          
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch(item.getItemId())
                {
                    case R.id.action_add:
                        fontSize+=5;
                        textView.setTextSize(fontSize);
                        break;
                    case R.id.action_sub:
                        fontSize-=5;
                        textView.setTextSize(fontSize);
                        break;
                    case R.id.action_background:
                        int red = (int)(Math.random()*256);
                        int green = (int)(Math.random()*256);
                        int blue = (int)(Math.random()*256);
                        textView.setBackgroundColor(Color.rgb(red, green, blue));
                        break;
                }
                return false;
            }
        });     
        //显示菜单
        pop.show();
}

4)ListView长按显示菜单:长按listView的一项,显示上下文菜单
实现1:
让listView实现OnCreateContextMenuListener接口,

    1)
listView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

            @Override
            public void onCreateContextMenu(ContextMenu menu, View v,
                    ContextMenuInfo menuInfo) {
                menu.add(0, 0, 0, "新建");
                menu.add(0, 1, 0, "删除");
                menu.add(0, 2, 0, "编辑");
                menu.setQwertyMode(true);

            }
        });
2@Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item
                .getMenuInfo();
        int position = menuInfo.position;//menuInfo记录了长按选项的位置
        Log.i("--", "position :" + position);
        switch (item.getItemId()) {
        case 0:
            Toast.makeText(this, "新建", 0).show();
            break;
        case 1:
            Toast.makeText(this, "删除", 0).show();
            break;
        case 2:
            Toast.makeText(this, "编辑", 0).show();
            break;
        default:
            break;
        }

        return super.onContextItemSelected(item);
    }

实现2:
让listView注册上下文菜单。

//注册上下文菜单
registerForContextMenu(listView);
@Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        AdapterContextMenuInfo acm = (AdapterContextMenuInfo) menuInfo;
        //得到当前长按的是listView中哪一个位置
        currentItemPostion = acm.position;
        getMenuInflater().inflate(R.menu.main, menu);
    }

源码

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

共有 人打赏支持
北ing
粉丝 0
博文 12
码字总数 17332
作品 0
海淀
Android开发权威指南(第2版)新书发布

《Android开发权威指南(第二版)》是畅销书《Android开发权威指南》的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45章精彩内容供读者学习。  《Android开发权威指...

androidguy
06/29
0
0
《Cocos2d-x实战 JS卷 Cocos2d-JS开发》上线了

感谢大家一直以来的支持! 各大商店均开始销售: 京东:http://item.jd.com/11659698.html 当当:http://product.dangdang.com/23659808.html 《Cocos2d-x实战 JS卷 Cocos2d-JS开发》源码及样...

智捷课堂
2015/03/26
0
0
Android技能树 — Rxjava取消订阅小结(1):自带方式

前言: Android技能树系列: Android基础知识 Android技能树 — 动画小结 Android技能树 — View小结 Android技能树 — Activity小结 Android技能树 — View事件体系小结 Android技能树 — ...

青蛙要fly
05/29
0
0
[深入理解Android卷二 全文-第一章]开发环境部署

由于《深入理解Android 卷一》和《深入理解Android卷二》不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在OSC博客中全文转发这两本书的全部内容。 第1章 开发环境部署 本章...

邓凡平
2015/08/03
0
0
《Cocos2d-x实战 Lua卷》上线了

感谢大家一直以来的支持! 各大商店均开始销售: 京东:http://item.jd.com/11659697.html 当当:http://product.dangdang.com/23659810.html 《Cocos2d-x实战 Lua卷》源码及样章下载地址: ...

智捷课堂
2015/03/26
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea新建springCloud项目(5)- 订单服务

1.创建订单api,如下: 2.创建订单实现逻辑 3.新建订单、订单商品表 -- 订单 create table `order_master` ( `order_id` varchar(32) not null, `buyer_name` varchar(32) not null comment......

monroeCode
19分钟前
1
1
游戏开发经验谈(二):对战类全球服游戏的设计与实现

上篇文章《游戏开发经验谈(一):游戏架构里隐藏的五个坑及其应对方案》,我们主要讲解了游戏架构设计当中隐藏的一些坑及其应对方案,错过的小伙伴可以回溯之前的内容。本期内容,将会重点介...

UCloudTech
28分钟前
0
0
Mysql基本语法

一.联合主键 drop table CONTENT_AND_CATALOG;CREATE TABLE `tobebetter`.`CONTENT_AND_CATALOG` ( `ID` VARCHAR(120) NOT NULL , `CONTENT_ID` VARCHAR(120) , `CA......

我是菜鸟我骄傲
30分钟前
0
0
179. centos7 安装mariadb

1. centos7 中安装mariadb 1.1 执行安装 centos7 自带了mariadb yum -y install mariadb mariadb-server 1.2 启动mariadb systemctl start mariadb 1.3 设置开机启动 systemctl enable maria......

Lucky_Me
37分钟前
0
0
【AI实战】动手训练自己的目标检测模型(YOLO篇)

在前面的文章中,已经介绍了基于SSD使用自己的数据训练目标检测模型(见文章:手把手教你训练自己的目标检测模型),本文将基于另一个目标检测模型YOLO,介绍如何使用自己的数据进行训练。 ...

雪饼
43分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部