`

Menu详解(一):代码实现系统菜单及子菜单

阅读更多

转于:http://blog.csdn.net/harvic880925/article/details/38657463

 

--------------------------------------------------------------------------------------------------

 

 

前言:这周看到菜单部分,以前也对菜单有过使用,但并没有系统的对菜单进行梳理。这次借着这个机会,对菜单进行梳理。但只是很浅显的系统讲解,即对菜单的种类及各种用法作了一些讲述,并没有对如何使用自定义的菜单布局做讲述,等下次有机会再次遇到的时候再补充吧,一下搞太多,有点吃不消,很累的。

 

系列文章:

1、《Menu详解(一):代码实现系统菜单及子菜单》

2、《Menu详解(二):利用XML生成菜单和子菜单》

3、《Menu详解(三):使用上下文菜单》

 

一、基础知识

 

1、菜单分类

我认为菜单只有两类,一个是系统菜单,一个是上下文菜单

 

  • 系统菜单:指按下menu键,所弹出的菜单。
  • 上下文菜单:长按某一项,所弹出的菜单。

 

对于子菜单,我不觉得应该加入到上面的类别中,因为它并不是一种特殊的菜单种类,而仅仅是菜单的一种嵌套应用而已。

这个系列博客会逐个讲解这两个菜单的分类,本篇文章先从系统菜单开始。

2、菜单的基本知识

在代码中,我们会经常用到的几个知识点,先做下讲解。

菜单组(group):菜单组,是指包含几个菜单项的一个组合。之 所以划分菜单组,是方便我们对该组菜单中的项,做统一操作,比如,该菜单组里的所有项全部隐藏,全部不可用,等。

菜单项ID(itemID):此ID在一个Activity中,不可重复,因为他唯一标识了一个菜单项。注意,我这里说的是一个Activity页面,而不是一个菜单页面!!!!

这里先简单的对这两个概念说一下,初学者可能不大理解,没关系,下面举例说明。

二、系统菜单的基本实现

效果图:

注意菜单项排序

我们先看下代码:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. public class MainActivity extends Activity {  
  2.   
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.activity_main);  
  7.     }  
  8.   
  9.   
  10.     @Override  
  11.     public boolean onCreateOptionsMenu(Menu menu) {  
  12.           
  13.         int groupId=1;  
  14.         menu.add(groupId, 11"menu1_1");  
  15.         menu.add(groupId, 23"menu1_2");  
  16.           
  17.         int groupId2=2;  
  18.         menu.add(groupId2, 32"menu2_1");  
  19.         menu.add(groupId2, 44"menu2_2");  
  20.         return true;  
  21.     }  
  22.   
  23.     @Override  
  24.     public boolean onOptionsItemSelected(MenuItem item) {  
  25.           
  26.         //提示一下,当前做了什么操作  
  27.         Toast.makeText(getApplicationContext(), item.getTitle(), Toast.LENGTH_SHORT).show();  
  28.          
  29.         //根据ItemId来判断当前点击的菜单项是哪一个,从而进行操作  
  30.         int id = item.getItemId();  
  31.         if (id == 1) {  
  32.             TextView tv=(TextView)findViewById(R.id.helloworld);  
  33.             tv.setText("menu1_1 clicked");  
  34.             return true;  
  35.         }  
  36.         return super.onOptionsItemSelected(item);  
  37.     }  
  38. }  

如果大家仔细观察每次新建项目时就会发现,onCreateOptionsMenu()和onOptionsItemSelected()是在项目新建的时候,系统会自己为我们添加的代码。

  • onCreateOptionsMenu():当用户按下设置键时,系统会调用这个方法,其中的Menu参数就是我们要显示的菜单;
  • onOptionsItemSelected():当用户选择一个菜单项时,系统会转到这个方法中进行处理,用户只需要识别出当前用户按下的是哪个菜单,然后做处理就行了,下面具体讲解。

 

1、先看onCreateOptionsMenu():

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. @Override  
  2. public boolean onCreateOptionsMenu(Menu menu) {  
  3.       
  4.     int groupId=1;  
  5.     menu.add(groupId, 11"menu1_1");  
  6.     menu.add(groupId, 23"menu1_2");  
  7.       
  8.     int groupId2=2;  
  9.     menu.add(groupId2, 32"menu2_1");  
  10.     menu.add(groupId2, 44"menu2_2");  
  11.     return true;  
  12. }  

这里有个add()函数,它的原型是这样的:

 

 

public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title)

其中:

 

 

  • groupId:组ID
  • itemId:菜单项ID,我们上面讲了,整个activity中,这个ID值必须是唯一的。先记住即可,后面我们会讲为什么要唯一。
  • order:是在一个菜单中的排序顺序,一个菜单的排序顺序会根据这个值,由小到大排列菜单项。所以,仔细看上面的排序方式,我故意把排序顺序改成了,1,3,2,4;但界面中菜单的排序应该是按1,2,3,4 这样排序的:(从效果图可以看到,菜单的排序是按order的大小排列的!)

在上面的代码中,我们讲菜单分成了两个组,这个组的概念仅仅在代码中有用,在效果图中是根本看不出来的,因为在代码中,我们可以对组直接操作。这个后面会看到。

2、再看看onOptionsItemSelected()

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. @Override  
  2. public boolean onOptionsItemSelected(MenuItem item) {  
  3.       
  4.     //提示一下,当前做了什么操作  
  5.     Toast.makeText(getApplicationContext(), item.getTitle(), Toast.LENGTH_SHORT).show();  
  6.      
  7.     //根据ItemId来判断当前点击的菜单项是哪一个,从而进行操作  
  8.     int id = item.getItemId();  
  9.     if (id == 1) {  
  10.         TextView tv=(TextView)findViewById(R.id.helloworld);  
  11.         tv.setText("menu1_1 clicked");  
  12.         return true;  
  13.     }  
  14.     return super.onOptionsItemSelected(item);  
  15. }  

这个实现很好理解,先用一个Toast提示当前点击的Item的名称;

 

然后根据itemId进行判断,当id等于1时,把hello word改成menu1_1 clicked;
由此可以看出,我们对某个menuItem进行响应,是根据ItemId来识别的,所以ItemId必须唯一!

三、代码操作菜单组

为了让大家深入理解组的概念,这里有三个函数都是对组进行操作的:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. * Menu::setGroupVisible():将指定组的菜单设置为可见或不可见  
  2. * Menu::setGroupEnabled():将指定组的菜单设置为可用或不可用  
  3. * Menu::setGroupCheckable():将指定组的菜单设置为单选或多选  

这三个的原原型分别如下:

 

 

public abstract void setGroupVisible (int group, boolean visible)

Added in API level 1

Show or hide all menu items that are in the given group.

Parameters
group visible
The group of items to operate on.
If true the items are visible, else they are hidden.

public abstract void setGroupEnabled (int group, boolean enabled)

Added in API level 1

Enable or disable all menu items that are in the given group.

Parameters
group enabled
The group of items to operate on.
If true the items will be enabled, else they will be disabled.

public abstract void setGroupCheckable (int group, boolean checkable, boolean exclusive)

Added in API level 1

Control whether a particular group of items can show a check mark. This is similar to calling setCheckable(boolean) on all of the menu items with the given group identifier, but in addition you can control whether this group contains a mutually-exclusive set items. This should be called after the items of the group have been added to the menu.

Parameters
group checkable exclusive
The group of items to operate on.
Set to true to allow a check mark, false to disallow. The default is false.
If set to true, only one item in this group can be checked at a time; checking an item will automatically uncheck all others in the group. If set to false, each item can be checked independently of the others.

最后一个函数,我要特别说一下,setGroupCheckable()的第三个参数设为True或False,这是单选还是多选的开关,如果设为True,只能单选;设为False,为多选。
下面是个例子:

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. public class MainActivity extends Activity {  
  2.   
  3.     private Menu mMenu;  
  4.     private int groupId_1=1;  
  5.     private int groupId_2=2;  
  6.     @Override  
  7.     protected void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.activity_main);  
  10.     }  
  11.   
  12.   
  13.     @Override  
  14.     public boolean onCreateOptionsMenu(Menu menu) {  
  15.           
  16.         mMenu=menu;  
  17.           
  18.         //添加第一组菜单  
  19.         menu.add(groupId_1, 10"1——将第二组按钮不可见");  
  20.         menu.add(groupId_1, 20"1——将第二组按钮可见");  
  21.         menu.add(groupId_1, 30"1——将第二组按钮不可用");  
  22.         menu.add(groupId_1, 40"1——将第二组按钮可用");  
  23.           
  24.         //添加第二组菜单   
  25.         menu.add(groupId_2, 55"2——将第一组变成checkable");  
  26.         menu.add(groupId_2, 66"2——去掉第一组的checkable");  
  27.       
  28.         return true;  
  29.     }  
  30.   
  31.     @Override  
  32.     public boolean onOptionsItemSelected(MenuItem item) {  
  33.           
  34.         //提示一下,当前做了什么操作  
  35.         Toast.makeText(getApplicationContext(), item.getTitle(), Toast.LENGTH_SHORT).show();  
  36.           
  37.         switch (item.getItemId()) {  
  38.         case 1:  
  39.             mMenu.setGroupVisible(groupId_2, false);  
  40.             break;  
  41.         case 2:  
  42.             mMenu.setGroupVisible(groupId_2, true);       
  43.             break;  
  44.         case 3:  
  45.             mMenu.setGroupEnabled(groupId_2, false);  
  46.             break;  
  47.         case 4:  
  48.             mMenu.setGroupEnabled(groupId_2, true);  
  49.             break;  
  50.         case 5:  
  51.             mMenu.setGroupCheckable(groupId_1, truefalse);  
  52.             //最下面有最后一个参数true和false的区别,简单来说,设为False,可多选,设为True,只能单选  
  53.             break;  
  54.         case 6:  
  55.             mMenu.setGroupCheckable(groupId_1, falsefalse);  
  56.             break;  
  57.       
  58.         default:  
  59.             break;  
  60.         }  
  61.         return super.onOptionsItemSelected(item);  
  62.     }  
  63. }  

这段代码很好理解,在onCreateOptionsMenu()中新建两个组;
然后在onOptionsItemSelected()的响应代码中,对每个代码进行响应,下面截两个图吧,内容太多,两个效果:case 5和case 6,对比一下:

 

                                      case 5                                                     case 6

  

四、代码添加子菜单

在这段,我们将看到两个功能:如何添加子菜单,如何给菜单项添加图标(Icon)

效果图:

                             最后一项为子菜单                              点击,弹出子菜单

  

先看全部代码,再逐步讲解:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. public class MainActivity extends Activity {  
  2.   
  3.     private Menu mMenu;  
  4.     private int groupId_1=1;  
  5.     private int groupId_2=2;  
  6.     private int groupId_3=3;  
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.     }  
  12.   
  13.   
  14.     @Override  
  15.     public boolean onCreateOptionsMenu(Menu menu) {  
  16.           
  17.         mMenu=menu;  
  18.           
  19.         //添加第一组菜单  
  20.         menu.add(groupId_1, 11"1——将第二组按钮不可见");  
  21.         menu.add(groupId_1, 22"1——将第二组按钮可见");  
  22.         menu.add(groupId_1, 33"1——将第二组按钮不可用");  
  23.         menu.add(groupId_1, 44"1——将第二组按钮可用");  
  24.           
  25.         //添加第二组菜单   
  26.         menu.add(groupId_2, 55"2——将第一组变成checkable");  
  27.         //给一个菜单项添加Icon  
  28.         MenuItem item=menu.add(groupId_2, 66"2——去掉第一组的checkable");  
  29.         item.setIcon(R.drawable.ic_launcher);  
  30.           
  31.         //添加子菜单  
  32.         SubMenu subMenu=menu.addSubMenu(groupId_2, 77"子菜单---SubMenu");  
  33.         subMenu.setIcon(R.drawable.ic_launcher);//给SubMenu设置Icon  
  34.           
  35.         //给SubMenu添加菜单项  
  36.         subMenu.add(groupId_3, 91,"submenu_1");  
  37.         subMenu.add(groupId_3, 82,"submenu_2");  
  38.           
  39.         //给子菜单的菜单项添加Icon图标  
  40.         MenuItem subItem=subMenu.add(groupId_3, 113,"submenu_3");  
  41.         subItem.setIcon(R.drawable.ic_launcher);  
  42.       
  43.         return true;  
  44.     }  
  45.   
  46.     @Override  
  47.     public boolean onOptionsItemSelected(MenuItem item) {  
  48.           
  49.         //提示一下,当前做了什么操作  
  50.         Toast.makeText(getApplicationContext(), item.getTitle(), Toast.LENGTH_SHORT).show();  
  51.           
  52.         switch (item.getItemId()) {  
  53.         case 1:  
  54.             mMenu.setGroupVisible(groupId_2, false);  
  55.             break;  
  56.         case 2:  
  57.             mMenu.setGroupVisible(groupId_2, true);       
  58.             break;  
  59.         //其它省略  
  60.       
  61.         default:  
  62.             break;  
  63.         }  
  64.         return super.onOptionsItemSelected(item);  
  65.     }  
  66.       
  67. }  

1、onCreateOptionsMenu()部分

 

看这段代码:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. //给一个菜单项添加Icon  
  2. MenuItem item=menu.add(groupId_2, 66"2——去掉第一组的checkable");  
  3. item.setIcon(R.drawable.ic_launcher);  

这是利用MenuItem::setIcon()函数,给菜单项添加一个Icon

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. //添加子菜单  
  2. SubMenu subMenu=menu.addSubMenu(groupId_2, 77"子菜单---SubMenu");  
  3. subMenu.setIcon(R.drawable.ic_launcher);//给SubMenu设置Icon  

直接调用Menu::addSubMenu()来添加子菜单,同样它的参数包括groupId,ItemId,orderId;

 

SubMenu的设置Icon的方法也是SetIcon();

最后是给子菜单的菜单项添加Icon:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. //给子菜单的菜单项添加Icon图标  
  2. MenuItem subItem=subMenu.add(groupId_3, 113,"submenu_3");  
  3. subItem.setIcon(R.drawable.ic_launcher);  

可见添加Icon的方法都是调用SetIcon()函数;

 

注意:

在上面这段代码中,有个特别需要注意的地方,就是无论是主菜单的菜单项,还是子菜单的菜单项,ItemId都必须是唯一的,因为我们在onOptionsItemSelected()中是以ItemId来判定当前用户点击的是哪一个Item,并对其分别操作的,所以如果两个菜单项的ItemId一样了,那么点击他们两个都会执行同一个操作。

2、onOptionsItemSelected()

这里没什么好讲的,与以往一样,也是通过ItemId来分离所有Item,并指定相关操作的。

3、存在问题

大家如果在4.0以下的手机上运行上面代码,应该不会出现什么问题,但在>=4.0版的手机上运行时,Icon无法显示。这是因为4.0以上的版本对接口进行了更改,这个问题的解决办法如下 :

添加下面一个函数,并在onCreateOptionsMenu()开始处调用:setIconEnable(menu, true); 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. //enable为true时,菜单添加图标有效,enable为false时无效。4.0系统默认无效    
  2. private void setIconEnable(Menu menu, boolean enable)    
  3. {    
  4.     try     
  5.     {    
  6.         Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");    
  7.         Method m = clazz.getDeclaredMethod("setOptionalIconsVisible"boolean.class);    
  8.         m.setAccessible(true);    
  9.             
  10.         //MenuBuilder实现Menu接口,创建菜单时,传进来的menu其实就是MenuBuilder对象(java的多态特征)    
  11.         m.invoke(menu, enable);    
  12.             
  13.     } catch (Exception e)     
  14.     {    
  15.         e.printStackTrace();    
  16.     }    
  17. }    


这个问题的解决办法参考文章:《 解决android4.0系统中菜单(Menu)添加Icon无效问题》

 

五:OnMenuItemClickListener()---- Item点击监听器

我们前面一直在说用户点击了某一个菜单项以后,在onOptionsItemSelected()函数中进行拦截,其实还有一种拦截方法,就是自定义监听函数,然后利用setOnMenuItemClickListener()设定。

这涉及到两个问题:

 

  • 1、每一个监听函数仅针对一个item,所以如果使用自定义OnMenuItemClickListener监听函数,就要对每一个Item都要自定义一个,对于没有定义监听函数的Item,消息仍会派发到onOptionsItemSelected()中进行处理;
  • 2、对于设定了监听函数的Item,系统会在自定义的OnMenuItemClickListener函数中进行处理,即便在onOptionsItemSelected()中也写了处理函数,但系统是不会再进入onOptionsItemSelected()中点击消息的;

 

下面,举例说明上面两个问题:

全部代码:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. public class MainActivity extends Activity {  
  2.   
  3.     private int groupId_1=1;  
  4.     private int groupId_2=2;  
  5.     @Override  
  6.     protected void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.activity_main);  
  9.     }  
  10.   
  11.   
  12.     @Override  
  13.     public boolean onCreateOptionsMenu(Menu menu) {  
  14.           
  15.         menu.add(groupId_1, 11"menu1_1").setOnMenuItemClickListener(listener);    
  16.         menu.add(groupId_1, 22"menu1_2");    
  17.               
  18.         menu.add(groupId_2, 33"menu2_1");    
  19.         menu.add(groupId_2, 44"menu2_2");    
  20.         return true;    
  21.     }  
  22.   
  23.     @Override  
  24.     public boolean onOptionsItemSelected(MenuItem item) {  
  25.           
  26.         //提示一下,当前做了什么操作  
  27.           
  28.         switch (item.getItemId()) {  
  29.         case 1:  
  30.             Toast.makeText(getApplicationContext(), "onOptionsItemSelected  response: "+item.getTitle(), Toast.LENGTH_SHORT).show();  
  31.             break;  
  32.         //其它省略  
  33.         default:  
  34.             Toast.makeText(getApplicationContext(), item.getTitle(), Toast.LENGTH_SHORT).show();  
  35.             break;  
  36.         }  
  37.         return super.onOptionsItemSelected(item);  
  38.     }  
  39.       
  40.     //自定义一个MenuItemClickListener监听函数  
  41.     OnMenuItemClickListener listener =new OnMenuItemClickListener() {  
  42.               
  43.             @Override  
  44.             public boolean onMenuItemClick(MenuItem item) {  
  45.                 // TODO Auto-generated method stub  
  46.                  Toast.makeText(getApplicationContext(),"listener  response:" + item.getTitle(), Toast.LENGTH_SHORT).show();  
  47.                 return false;  
  48.             }  
  49.         };  
  50.       
  51. }  

在上面的代码中,我对第一个Item,不仅在OnMenuItemClickListener中添加处理,而且在onOptionsItemSelected中也做了提示处理,以便区别,系统到底在哪个里面进行处理。

 

下面是操作结果截图:

                         点击第一个Item                                             点击除了第一个Item的其它菜单项

  

从结果图中也可以看出,对于设定了OnMenuItemClickListener()监听函数的,就会在这个函数中进行处理;对于没有设定OnMenuItemClickListener()函数的,会在onOptionsItemSelected()中处理。

 

好了,本文就到这了。

 

我把上面所有用到的源码及效果图打包,供大家下载:

 

源码下载地址:http://download.csdn.net/detail/harvic880925/7782589

 

分享到:
评论

相关推荐

    《Menu详解(一):代码实现系统菜单及子菜单》对应源码

    这篇博客《Menu详解(一):代码实现系统菜单及子菜单》深入探讨了如何在Android应用中创建和使用Menu,包括主菜单和子菜单的构建。现在我们将详细解析这个主题。 首先,我们需要了解Menu的基本概念。在Android中,...

    《 Menu详解(二):利用XML生成菜单和子菜单》源码

    在这个例子中,我们定义了两个主菜单项,并在其中的一个下添加了一个子菜单。`android:icon`属性用来设置图标,`android:title`用于显示文本,而`android:id`则用于在代码中引用该菜单项。 接下来,我们需要在...

    element 中 el-menu 组件的无限极循环思路代码详解

    本文详细探讨了如何在 Element UI 中使用 el-menu 组件实现无限极循环菜单,即菜单项的子菜单项还可以拥有自己的子菜单,形成一个嵌套的结构。 为了实现无限极循环菜单,需要进行组件嵌套,即在 el-menu 组件内部...

    LCD_MENU_C.rar_LCD多级菜单_多级菜单

    1. 菜单结构:规划菜单的层级关系,如主菜单、子菜单、子子菜单等。 2. 导航机制:定义如何在菜单之间进行切换,例如通过按键选择、滚轮滚动或者触摸屏滑动。 3. 显示策略:确定如何在有限的LCD屏幕上展示多级菜单,...

    android各组件详解- Menu

    根据应用场景的不同,Android系统提供了三种类型的菜单:OptionsMenu、ContextMenu以及SubMenu。 1. **OptionsMenu**:这是一种全局菜单,通常通过设备上的物理Menu键或屏幕上的虚拟按钮来触发,适用于当前Activity...

    Android编程自定义菜单实现方法详解

    2. 隐藏和显示菜单:通过设置`View`的`visibility`属性,结合动画效果实现菜单的隐藏和显示。 3. 添加事件监听:为菜单项设置点击事件监听,实现点击后的功能响应。 4. 动态控制:根据应用需求,动态控制菜单的显示...

    C# Windows API操纵系统菜单讲解

    下面将详细介绍如何添加菜单项及实现与用户的交互。 #### 四、SystemMenu 类介绍 **SystemMenu** 类的设计简化了对系统菜单的访问和修改。通过调用静态成员函数 `FromForm` 可以获取一个 `SystemMenu` 对象实例,...

    Android菜单详解

    2. **子菜单(SubMenu)**:在选项菜单中,可以通过点击一个菜单项来展示子菜单,子菜单以悬浮窗口的形式呈现。子菜单不支持嵌套,即子菜单内不能包含其他子菜单。子菜单同样继承自`Menu`接口,可以通过`MenuItem`...

    Mainmenu控件的使用方法详解

    Remove方法也是用来删除菜单项的,但是与前面的DELETE和CLEAR方法不同,它的参数为TMenuitem型,用于删除指定的菜单项及其子菜单项。 Mainmenu控件提供了丰富的属性和方法,可以满足各种菜单设计的需求。

    CSS3圆形环绕菜单动画特效

    本篇将详细介绍如何利用CSS3实现一款在鼠标经过时,子菜单会依次出现并环绕在圆形主菜单周围的动画特效。 首先,我们来看`index.html`文件,这是整个网页的基础结构。通常,一个简单的HTML导航菜单会包含`&lt;nav&gt;`...

    java联动菜单实例详解

    在Java Swing或JavaFX中,我们可以使用JMenu和 JMenuItem类来创建菜单和子菜单。例如,创建一个顶级菜单,然后为每个子菜单项添加ActionListener,监听用户的点击事件。当事件触发时,根据需求动态生成或更新下级...

    VS2010MFC编程入门之三十四(菜单:VS2010菜单资源详解)

    下拉式菜单通常位于窗口标题栏下方,如在“HelloWorld”单文档工程中创建的那样,由主菜单栏、子菜单和菜单项组成。弹出式菜单则通过右键点击等方式显示,仅显示子菜单,没有可见的主菜单。 在VS2010中,菜单资源...

    div制作的弹出菜单

    ### 使用纯DIV+CSS实现三级Dropdown(下拉)菜单知识点详解 #### 一、概述 在Web开发中,导航菜单是任何网站不可或缺的一部分。它不仅能够帮助用户快速找到所需的信息,还能提升用户体验。本篇文章将深入探讨如何...

    特效名称:WinXP渐显声效菜单.txt

    - 根据当前菜单的状态,决定是否显示或隐藏对应的子菜单。 4. **测试与优化**: - 在不同的浏览器和分辨率下测试渐显效果是否正常。 - 根据实际需求调整动画时长和过渡效果。 #### 五、实际应用案例 1. **企业...

    纯div+css制作的弹出菜单

    - `.menu ul li:hover ul.left_side li`与`.menu ul li:hover ul.right_side li`分别定义了子菜单中左、右两侧项目的样式。 - `.menu ul li:hover ul li a.hide`:定义了隐藏样式的子菜单项链接样式。 5. **IE6...

    纯CSS3下划下拉菜单导航代码.rar

    纯CSS3下划线式下拉菜单导航代码详解 在网页设计中,下拉菜单是一种常见的导航元素,它能够帮助用户快速访问网站的多层次结构。随着CSS3技术的发展,我们不再依赖JavaScript就能实现动态效果丰富的下拉菜单。本篇...

    jquery 经典动画菜单效果代码

    通过CSS样式定义菜单外观,并利用jQuery处理鼠标悬停事件,实现了子菜单的显示与隐藏功能。 #### 二、技术栈 - **前端框架**:jQuery - **语言**:HTML、CSS、JavaScript - **目标浏览器**:现代浏览器(Chrome、...

    jQuery左侧手风琴菜单代码.zip

    《jQuery左侧手风琴菜单代码实现详解》 在网页设计中,导航菜单是不可或缺的一部分,它为用户提供清晰的页面结构和便捷的交互体验。而jQuery左侧手风琴菜单代码则是这种交互体验的一种优化表现,它将传统的下拉菜单...

Global site tag (gtag.js) - Google Analytics