文档章节

Android菜单使用小结

北ing
 北ing
发布于 2015/10/20 19:23
字数 836
阅读 34
收藏 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
《Android应用开发揭秘》超低价团购(已卖完)

注:团购价包含运费!此书在当当网售价51.80元。 《Android应用开发揭秘》内容简介: 国内第一本基于Android 2.0的经典著作,5大专业社区联袂推荐,权威性毋庸置疑! 本书内容全面,不仅详细...

老枪
2010/07/19
1K
17
开源中国2010年图书赠送活动《Android应用开发揭秘》

活动内容: 参与活动者请从现在开始,到2010年3月1日这段时间内,对Oschina独家发布的《Android应用开发揭秘》一书内容章节进行客观点评,及大家可以就该技术的趋势和定位提出一些看法,只要...

红薯
2010/01/25
5.9K
203
《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

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
38分钟前
2
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
6
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
6
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
5
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部