码迷,mamicode.com
首页 > 移动开发 > 详细

猴子都能看懂的Android Menu总结

时间:2016-05-10 20:54:00      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

简单谈谈Android menu菜单的使用,帮助入门的同学。

选项菜单:最常规的菜单
子菜单:多层菜单的实现方案之一
上下文菜单:android中长按视图控件后出现的菜单


选项菜单(OptionMenu)

该菜单默认在右上角显示,有两种布局方式,xml布局和java代码布局,首先看一下在XMl中的布局方式
一个简单的代码示例
技术分享

静态布局(xml):

    <group
        android:id="@+id/group1"
        android:checkableBehavior="single"
        android:visible="true">
        <item
            android:id="@+id/item1"
            android:orderInCategory="100"
            android:title="111" />
        <item
            android:id="@+id/item2"
            android:orderInCategory="99"
            android:title="222" />
    </group>

在java代码中创建与监听该menu的点击事件(重写下面两个方法即可)

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_first,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if(!item.isChecked()) item.setChecked(true);
        else item.setChecked(false);
        return true;
    }

当然,Item除了可以嵌入到Group中,也可以单独添加到menu中,这里就不演示了。关于Item和group的很多方法,方法名基本就可以明白,这里特别注意几个方法:
android:checkableBehavior="single",该方法设置item的选择类型,还有all和none两个选择类型,对应如图
技术分享
技术分享

注意,有一个showAsAction方法,用于控制Item的显示方式,使用前请务必添加xmlns:app="http://schemas.android.com/apk/res-auto",该方法主要有一下几个选项,看官们一看便知
技术分享

动态布局(java):

在重写的onCreateOptionsMenu方法中通过menu.add即可添加menu选项。
Demo:
技术分享

        menu.add("333");
        menu.add(1,1,1,"香蕉");
        menu.add(1,2,2,"苹果");

添加以上代码即可。参数:(int,int,int,String)分别指groupId,ItemID,orderCaterary和ItemText。第一个直接设置了ItemText单独存在。

切记,在默认隐藏的Item中设置icon是无法显示的


子菜单(subMenu)

感觉已经被废弃了,在测试中并不会和很久之前一样显示出一个悬浮的子菜单样式,实际效果如下:
技术分享

实现代码:
onCreateOptionsMenu添加如下代码:

        int base = 1;
        SubMenu subMenu = menu.addSubMenu(base, base+1, Menu.NONE, "水果大全");
        subMenu.add(base, base+1, base+1, "苹果");
        subMenu.add(base, base+2, base+2, "香蕉");
        subMenu.add(base, base+3, base+3, "橘子");

那么,如何在xml中实现如下效果呢?答案是嵌套,没错,代码一看便知

    <item android:title="水果大全">
        <menu >
            <item android:title="香蕉"></item>
            <item android:title="苹果"></item>
            <item android:title="橘子"></item>
        </menu>
    </item>

效果图:
技术分享


上下文菜单(ContextMenu)

这里以一个TextView的点击时间为例,长按显示上下文菜单
效果图:
技术分享

实现流程:
首先注册该View

        TextView textView = (TextView)findViewById(R.id.textView);
        this.registerForContextMenu(textView);

重写onCreateContextMenuonContextItemSelected

 @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("Hello");
        menu.setHeaderIcon(R.mipmap.ic_launcher);
        menu.add(1,1,3,"香蕉");
        menu.add(1,2,1,"菠萝");
        menu.add(1,3,1,"苹果");
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        return super.onContextItemSelected(item);
    }

上下文菜单与选项菜单最大的不同在于,Options Menu的拥有者是Activity,而上下文菜单的拥有者是Activity中的View。每个Activity有且只有一个Options Menu,它为整个Activity服务。而一个Activity往往有多个View,并不是每个View都有上下文菜单,这就需要我们显示地通过registerForContextMenu(View view)来指定。

OK,很简单,就不贴代码了,如果对你有用,欢迎下方点赞,有疑问也可以评论的形式提出。

猴子都能看懂的Android Menu总结

标签:

原文地址:http://blog.csdn.net/u014492609/article/details/51345711

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!