猴子都能看懂的Android Menu总结

Posted 痕迹天涯119

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了猴子都能看懂的Android Menu总结相关的知识,希望对你有一定的参考价值。

简单谈谈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总结的主要内容,如果未能解决你的问题,请参考以下文章

图解连狗子都能看懂的Python基础总结什么是库包模块?

图解连狗子都能看懂的Python基础总结什么是库包模块?

图解连狗子都能看懂的Python基础总结!

图解连狗子都能看懂的Python基础总结!

Unity发布Android新手教学 (小白都能看懂的教学 )

人人都能看懂的Spring源码解析,Spring如何解决循环依赖