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

【转】 Pro Android学习笔记(三一):Menu(2):扩展、图片、子菜单

时间:2015-12-15 14:23:58      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

目录(?)[-]

  1. 菜单扩展
  2. 菜单项加入图片
  3. 子菜单

菜单扩展

如果菜单项很多,超过六个时,就会采用菜单扩展模式。在例子中我加入了10个菜单项,预计能进入菜单扩展模式,但是实际效果如右图所示。效果和list非常相似,如果继续增加菜单项,可以通过上下拖动,来查看未能显示在屏幕上的菜单项。对于list模式,不能在菜单项中加入图标,也影响了我们下一步试验。

对于Android 4.0,系统缺省的UI风格有所变化,如果我们仍希望采用原有的显示方式,可以通过为Activity设置theme,指定风格,经过测试,Theme以及Theme.Light均可以使用旧的菜单风格,而Theme.Holo不行。如下:

<activity android:name=".MoreMenuTest" android:label="@string/moreMenuTest"
    android:theme="@android:style/Theme.Light" /> 

通过指定theme,我们可以实现所期望的带有扩展的菜单风格。按了带有三角符号的“More”后,按list风格显示余下的菜单项。

技术分享

需要特别提醒的是。【1】对于items.setCheckable(true);或者对整个Group进行setGroupCheckable(),只在list风格的menu中有显示效,在网格风格中无显示效。在网格的theme中,即便我们只有1个item,仍不能显示选中框,但是如果我们去询问isCheckable(),或者isChecked(),仍可以得到true和是否选中的状态,只是不能在UI上显示所期望的风格。【2】对于在menu item中增加图片,在网格风格中有效,而在list风格中无效不显示。

菜单项加入图片

技术分享

在菜单中添加图片很简单。前面已经提到,不能在list风格的菜单中显示。图片是不进行伸缩处理,而是按原尺寸在网格中显示。右图是两个不同尺寸的图片显示情况,第一个图由于图片大,菜单的title没能显示出来。在商用应用中,我们应在drawable-??dpi/中放入不同尺寸的图片,以保证能够适配不同屏幕尺寸。代码很简单,如下:

item = menu.add( ...... ); 
item.setIcon(R.drawable.clock /*资源ID*/);

子菜单

SubMenu是Menu的继承项目。我们在上面小例子的最前的位置将如一个子菜单,代码如下:

private void subMenuTest(Menu menu){  
    //addSubMenu()的参数和addMenu一样。要将子菜单放在第一位子,就需要第三个参数orderId为最小,所以我们在设置菜单时,有时需要留有余地,或者偏移量为自定义,即便设置static int MENU_BASE = Menu.FIRST,这样以后需要调整时比较方便。
    SubMenu subMenu = menu.addSubMenu(SUBMENU_BASE, SUBMENU_BASE +1, Menu.FIRST + 10, "Sub Menu");

   //测试:子菜单项可以加入icon。从图上我们看到,子菜单的呈现是list方式,也就是说在子菜单的菜单项中无法体现图片效果。
    subMenu.setIcon(R.drawable.leaf);     
       
    //子菜单是菜单的子类,所以增加菜单项方式一样 
    subMenu.add(SUBMENU_BASE, SUBMENU_BASE +1, SUBMENU_BASE +1,"Sub.1"); 
    subMenu.add(SUBMENU_BASE, SUBMENU_BASE +2, SUBMENU_BASE +2,"Sub.2"); 
    subMenu.add(SUBMENU_BASE, SUBMENU_BASE +3, SUBMENU_BASE +3,"Sub.3");    

    //SubMenu是Menu的子类,所以SubMenu中也可以有SubMenu,下面测试这种情况。由于只是简单测试,只填入title。在《Pro Android 4.0》一书中说不能在子菜单中加入子菜单,但是测试时发现可以,至少在Android 4.2上正常。如果不填入GroupId,itemId,orderId,则它们缺省都为Menu.NONE。
    SubMenu subsub = subMenu.addSubMenu("subInSub"); 
    subsub.add("sub.sub.1"); 
    subsub.add("sub.sub.2");     

技术分享

效果如图。由于子菜单点击后是list风格呈现,这说明在子菜单中加入图片是无显示效果。

本博文涉及的例子代码,可以在Pro Android学习:Menu中下载。

相关链接: 我的Android开发相关文章

【转】 Pro Android学习笔记(三一):Menu(2):扩展、图片、子菜单

标签:

原文地址:http://www.cnblogs.com/blongfree/p/5047957.html

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