文档章节

Android菜单使用小结

北ing
 北ing
发布于 2015/10/20 19:23
字数 836
阅读 30
收藏 0
点赞 0
评论 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 ⋅ 2013/09/05 ⋅ 0

Android技能树 — Rxjava取消订阅小结(1):自带方式

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

青蛙要fly ⋅ 05/29 ⋅ 0

Android技能树 — Rxjava取消订阅小结(2):RxLifeCycle

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

青蛙要fly ⋅ 05/29 ⋅ 0

Android技能树 — 树基础知识小结(一)

前言: 现在安卓面试,对于数据结构的问题也越来越多了,也经常看到别人发的面试题都是问什么红黑树,二叉树查找等,所以我们虽然不会马上就会各种难的面试题,但起码树的基础知识还是要会的...

青蛙要fly ⋅ 05/04 ⋅ 0

31 天,从浅到深轻松学习 Kotlin

这篇文章介绍开发者用 31 天学习 Kotlin 的心得,深入浅出地介绍了 Kotlin 的一些基本特性以及高级用法,对处于不同阶段的 Kotlin 开发者来说,在提高开发效率和了解 Kotlin 提供一些参考,希...

Android_开发者 ⋅ 05/30 ⋅ 0

Flutter学习总结----第一章、Flutter基础

Flutter学习总结: 更多相关内容和示例代码,请看我的github: https://github.com/AweiLoveAndroid/Flutter-learning 第1章、基础入门 1.1 Flutter简介 1.1.1 跨平台框架的发展历史 详情请看...

AWeiLoveAndroid ⋅ 06/21 ⋅ 0

[图]Chrome OS启用新版系统托盘菜单:优化触控操作

Chromium的技术传道者François Beaufort今天在Google+上透露,Chrome OS团队正为Chromebook所用系统研发全新设计的系统菜单。Google旗下的Chrome OS生态系统近年来发展迅猛,尤其是在教育市...

稿源: ⋅ 06/19 ⋅ 0

安卓巴士Android开发者门户

一、开源库 1.SimpleRatingBar 简单好用的ratingbar 2.NumberRain Android自定义控件仿黑客帝国数字雨 3.CacheWebView 突破系统WebView缓存的空间限制的WebView 4.lucklypopupwindow Android...

迷你芊宝宝 ⋅ 前天 ⋅ 0

Flutter Plugin开发流程

这篇文章主要介绍了Flutter Plugin开发流程,包括如何利用Android Studio开发以及发布等。 今天这篇文章,给大家介绍如何开发Flutter Plugin中Android的部分。有关Flutter以及Flutter Plugi...

Q吹个大气球Q ⋅ 05/12 ⋅ 0

安卓应用安全指南 六、困难问题

六、困难问题 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0 在 Android 中,由于 Android 操作系统规范或 Android 操作系统提供的功...

apachecn_飞龙 ⋅ 04/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringBoot集成Druid的最简单的小示例

参考网页 https://blog.csdn.net/king_is_everyone/article/details/53098350 建立maven工程 Pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM......

karma123 ⋅ 今天 ⋅ 0

Java虚拟机基本结构的简单记忆

Java堆:一般是放置实例化的对象的地方,堆分新生代和老年代空间,不断未被回收的对象越老,被放入老年代空间。分配最大堆空间:-Xmx 分配初始堆空间:-Xms,分配新生代空间:-Xmn,新生代的大小一...

算法之名 ⋅ 今天 ⋅ 0

OSChina 周日乱弹 —— 这么好的姑娘都不要了啊

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @TigaPile :分享曾惜的单曲《讲真的》 《讲真的》- 曾惜 手机党少年们想听歌,请使劲儿戳(这里) @首席搬砖工程师 :怎样约女孩子出来吃饭,...

小小编辑 ⋅ 今天 ⋅ 8

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部