减少Menu分割线的间距

news/2024/5/19 18:43:44 标签: menu, flash, function, adobe, flex, google

        之前看到社区中有介绍怎样灵活使用右键菜单的文章。现在积累下来右键菜单的方式还是比较多的,让我们来初步了解一下:

1.    使用flash自带的右键菜单,通过ContextMenu来设置,这是twaver最早右键菜单的解决方法,但这种方式有一个不太好的地方是自带上了flash的信息,而且无法删除,因此很不方便。

menu1" src="http://twaver.servasoft.com/wp-content/uploads/2012/06/menu1.png" alt="" width="351" height="180" />

2.     使用Menu,通过左键的方式来触发弹出Menu项。这个方式还是比较能够接受的,对于flash也没有版本的要求。

3.    使用Flash Player 11.2的新功能实现右键菜单,这种方式虽然好,但是需要使用比较高的flash版本,而我们项目中很多用户使用的还是老的版本,领导觉得这种方法不太适合我们。上面的三种方式,我们最终选择了第二种。在实际使用过程中总是有这样那样的问题。我今天就碰到了一个这样的问题。我使用的是第二种方法:通过menu来实现右键菜单。由于菜单项比较多,而且实际应用中也还需要对菜单项进行分类、分层。

menu1" src="http://twaver.servasoft.com/wp-content/uploads/2012/06/menu11.png" alt="" width="318" height="287" />

       这种效果一般来说已经够用了,但是领导觉得分割线和上下文字之间的间距太大了,需要改小一点,于是上网查了资料,发现确实有一个参数能控制:variableRowHeight。这里有详细的使用例子:Reducing the vertical space around a separator in a Flex PopUpButton control’s pop up menu by enabling variable row heights

menu2" src="http://twaver.servasoft.com/wp-content/uploads/2012/06/menu2.png" alt="" width="553" height="249" />

        赶紧试试我的菜单效果,于是给menu设置了variableRowHeight=true,但效果却不是那么尽如人意:

menu2" src="http://twaver.servasoft.com/wp-content/uploads/2012/06/menu21.png" alt="" width="311" height="284" />

       一级菜单还行,二级菜单上的分割线样式还是原来那样,没变,这会是什么原因呢?继续Google发现基本都是说设置了这个属性值就可以了。难道还是Adobe的bug?算了,还是自己看源码吧:

mx_internal function openSubMenu(row:IListItemRenderer):void
{
supposedToLoseFocus = true;

var r:Menu = getRootMenu();
var menu:Menu;

// check to see if the menu exists, if not create it
if (!IMenuItemRenderer(row).menu)
{
menu = new Menu();
menu.parentMenu = this;
menu.owner = this;
menu.showRoot = showRoot;
menu.dataDescriptor = r.dataDescriptor;
menu.styleName = r;
menu.labelField = r.labelField;
menu.labelFunction = r.labelFunction;
menu.iconField = r.iconField;
menu.iconFunction = r.iconFunction;
menu.itemRenderer = r.itemRenderer;
menu.rowHeight = r.rowHeight;
menu.scaleY = r.scaleY;
menu.scaleX = r.scaleX;

// if there's data and it has children then add the items
if (row.data &&
_dataDescriptor.isBranch(row.data) &&
_dataDescriptor.hasChildren(row.data))
{
menu.dataProvider = _dataDescriptor.getChildren(row.data);
}
menu.sourceMenuBar = sourceMenuBar;
menu.sourceMenuBarItem = sourceMenuBarItem;

IMenuItemRenderer(row).menu = menu;
PopUpManager.addPopUp(menu, r, false);
}

       看来是二级菜单上没有copy主菜单variableRowHeight的属性值,因此还是自己定义一个itemRenderer,将属性值设置到itemrenderer里面:

public class CustomMenuItemRenderer extends MenuItemRenderer {
public function CustomMenuItemRenderer() {
}
override protected function measure():void {
super.measure();
(this.owner as Menu).variableRowHeight = true;
}
}

       然后通过menu.itemRenderer = new ClassFactory(CustomMenuItemRenderer);设置上自定义的这个renderer,运行看看效果:menu3" src="http://twaver.servasoft.com/wp-content/uploads/2012/06/menu31.png" alt="" width="346" height="254" />

     终于达到了我们预期效果了,最后给大家分享一下源码:见原文下方


http://www.niftyadmin.cn/n/1765849.html

相关文章

TWaver图形界面之道(六)TWaver设计模式

继续上一章的TWaver图形界面之道(五)Hello TWaver TWaver设计模式 让我们详细探讨TWaver的设计模式,本章包括三个方面:MVC的设计模式,数据元素与数据容器,以及事件驱动机制。 什么是设计模式?…

Java多线程:什么时候使用哪种实现方式

广州疯狂软件学院拥有三大课程体系包括:java课程,android课程,ios课程,更多java知识,android知识,ios知识,疯狂软件官网持续更新中。 众所周知,JAVA里实现多线程有两种方式。 一是继…

用TWaver HTML5定制五彩斑斓的链路

最近有客户提到自定义链路的需求,个人感觉非常有代表意义,现在共享出来给大家参考一下。先来看看需求: 链路要分成两半,用两种颜色填充。填充百分比在不同值域时,用不同颜色。显示刻度有个开关,可以控制链…

作业 5 指针应用1

1、自学教材 第8章 指针,回答以下问题: 变量、内存单元和地址之间是什么关系?如何定义指针变量,怎样才能使用指针变量?什么是指针变量的初始化?指针变量的基本运算有哪些?如何使用指针操作所指向…

TWaver图形之道(七)TWaver开发流程

TWaver开发流程 TWaver是一种前台解决方案,它的地位在系统多层结构的UI层,开发的过程通常是:数据采集,数据转化,视图关联,界面交互,业务操作,然后重复这个过程。 下面用代码来说明…

2015-J. PUMA

描述 (题名来源:2009年校队出战合肥现场赛曾用队名) PUMA是全球著名的运动品牌,PUMA的鞋与服饰在嘻哈涂鸦文化中受到全球各地年轻人的极度欢迎,同时PUMA与adidas更是1970与1980年代嘻哈文化的代表。PUMA公司是德国一家…

用Swing定制流动的Link样式

想想Java2D中给我们提供的线的样式着实很少,除了直线,虚线,好像就没有其他的什么样式了,如果细心的童鞋还会发现,TWaver中倒是提供了一种比较特殊的连线,波浪曲折式的连线。 这种波浪曲折的连线如果让我们自…

我的modelsim常用DO文件设置

在modelsim中使用do文件是非常方便的进行仿真的一种方法,原来接触到的一些项目不是很大,用modelsim仿真只需要仿真单独的一些模块,最近接触的项目比较大,是几个人分开做的,所以前后模块的联合仿真比较重要,…