android Menu菜单操作(偏门--监听 more 操作)

        在网上关于Menu如何创建,点击事件的文章已经很多,所以想查询此功能的网友可以在google上面随便搜一下就有很多,但是今天我说的这个功能可能是个偏门,可能很少注意,也很少人需要,所以在网上找了很多,但是没有找到相关信息。所以在此记录下来,闲话少说,进入正题。

先简单说下menu:android 提供三种基本的menu类型:

Options Menu

这是一个菜单的基本元素。通过按menu的屏幕键才显示。有两种类型的menu菜单:

Icon Menu

通过按下menu键会出现这些可见按钮的集合。最大可以支持6个选项。只能显示为图标,并且菜单项只能为按钮,不能是选择框。

Expanded Menu

Icon menu有一个more选项,有一个选项集。只有当 Icon Menu 菜单被重写,并且有超过六个的选项时才会被显示。

Context Menu

这个菜单会在你长时间按view时显示。

Submenu

这是一个子菜单,可以添加到 Options Menu 或 Context Menu 菜单的选项中,子菜单不支持嵌套使用。

       大家知道,在创建menu的时候,一种比较好的方法是使用xml文件,使架构比较清晰,在这里使用Browser源代码里面的操作给大家演示一下

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
    	if(debug) Log.d(TAG, "onCreateOptionsMenu");
        super.onCreateOptionsMenu(menu);

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.browser, menu);
        mMenu = menu;
        updateInLoadMenuItems();
        return true;
    }
在上面的代码里面,很简单的生成了一个比较复杂的menu,其中R.menu.browser的文件代码如下:



    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
    
    
    

 

这样,就生成了,如下图所示的菜单,在menuitem中,有android:orderInCategory这个属性:orderInCategory表明摆放的顺序,不一定从0还是计算,但必须大于等于0,数值小的位于前。

                                               我们有很多菜单选项,但是在这里最多只能显示6个,其他的我们只能在more里查找。

            但是如果我们想监听More的点击方法,想在点击more(跟多)的时候做一些操作,在 onOptionsItemSelected(MenuItem item)方法里面发现无解。我们可以复写下面的方法。

@Override
    public boolean onMenuOpened(int featureId, Menu menu) {
    	if(debug) Log.d(TAG, "onMenuOpened");
        if (Window.FEATURE_OPTIONS_PANEL == featureId) {
            if (mOptionsMenuOpen) {
                if (mConfigChanged) {
                    // We do not need to make any changes to the state of the
                    // title bar, since the only thing that happened was a
                    // change in orientation
                    mConfigChanged = false;
                } else {
                    if (mIconView) {
                        // Switching the menu to expanded view, so hide the
                        // title bar.
                        mIconView = false;
                    } else {
                        // Switching the menu back to icon view, so show the
                        // title bar once again.
 
                        mIconView = true;
                    }
                }
            } else {
                // The options menu is closed, so open it, and show the title
                showFakeTitleBar();
                mOptionsMenuOpen = true;
                mConfigChanged = false;
                mIconView = true;
            }
        }
        return true;
    }

         这样,就可以在onMenuOpened方法里面进行你想要的操作。

你可能感兴趣的:(android小例子,Android小例子,action,android,Android,bookmarks,menu,tabs)