`

减少Menu分割线的间距

阅读更多

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

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


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

3. 使用Flash Player 11.2的新功能实现右键菜单,这种方式虽然好,但是需要使用比较高的flash版本,而我们项目中很多用户使用的还是老的版本,领导觉得这种方法不太适合我们。

上面的三种方式,我们最终选择了第二种。在实际使用过程中总是有这样那样的问题。我今天就碰到了一个这样的问题。我使用的是第二种方法:通过menu来实现右键菜单。由于菜单项比较多,而且实际应用中也还需要对菜单项进行分类、分层。



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



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



一级菜单还行,二级菜单上的分割线样式还是原来那样,没变,这会是什么原因呢?继续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,运行看看效果:



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

分享到:
评论

相关推荐

    AntDesign组件库目录.docx

    - **其他元素(分割线和不可用菜单项)**: 支持在菜单中添加分割线以及不可用的菜单项。 - **弹出位置**: 可以设置下拉菜单弹出的位置。 - **触发方式**: 支持不同的触发方式,如点击、悬停等。 - **右键菜单**: ...

    前端笔记_7月7日1

    3. **换行与分割线**:` `标签用于强制文本换行,而`<hr>`标签则创建一条水平分割线,通常用于分隔内容或章节。 4. **文本格式化标签**:`<b>`定义粗体文本,`<big>`定义大号字,`<em>`定义着重或强调的文本,`...

    仿QQ侧滑菜单

    - 通过修改`NavigationView`的样式和主题,可以自定义菜单的背景色、字体颜色、分割线等视觉元素。 - 也可以为菜单项添加自定义的视图,比如使用`HeaderView`或`FooterView`。 8. **响应式布局**: - 考虑到不同...

    Eclipse 插件入门开发教程

    - **添加分割线**:`separator`标记用于在菜单或工具栏中添加分割线,增强界面的清晰度。 **四、插件开发调试** - **调试方法**:利用Eclipse自带的调试工具进行插件的调试,包括断点、步进执行等功能。 - **常见...

    html标签默认样式整理

    hr则表现为1像素宽的3D凹边的水平分割线。 ol、ul、dir、menu和dd等列表相关标签具有默认的左侧外边距,用于创建列表的缩进效果。 这些默认样式是HTML文档的基础,理解它们可以帮助开发者更好地控制页面布局和视觉...

    Bootstrap组件(一)之菜单

    - **分割线**: 使用`.divider`类创建分隔线,增强菜单的视觉效果。 - **禁用菜单项**: 通过`.disabled`类禁用菜单项,改变其颜色以表示不可选状态。 了解这些基本概念后,开发者可以轻松地在Bootstrap项目中集成...

    cad考试题类型[cad考试试题].pdf

    26. **多线控制**:画多线时,输入`MLSTYLE`可以控制间距,输入`MLEDIT`可以控制拖动哪条线。 27. **BL命令**:`BLANK`用于控制空白区域的处理。 28. **思考题**:题目中提到的“何用等分没有出现?”、“输入汉字...

    primefaces中文教程

    3. **Divider**:分割线,用于界面元素之间的分隔。 #### 十、图形图像多媒体组件 1. **ImageCompare**:图像比较组件,提供图像对比功能。 2. **GraphicText**:文本图象化显示,将文本转换为图形。 3. **Image...

    mindmapper 说明书

    - **2.3.7 主题间距 (Spacing Between Topics)** - 调整相邻主题之间的距离。 **2.4 查看与导航 (Viewing and Navigating MindMapper)** - **2.4.1 放大/缩小 (Zooming)** - 改变视图比例。 - **2.4.2 平移 ...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    可以看到添加的文件为menu.qrc。 9.我们最好先在工程文件夹里新建一个文件夹,如images,然后将需要的图标 文件放到其中。 10.在Qt Creator 的menu.qrc 文件中,我们点击Add 下拉框,选择Add Prefix。 我们可以将...

    css开发字典

    - 文本的对齐方式之一,使文本两端对齐,间距均匀。 - 通过`text-align: justify`属性实现。 **Language(语言)** - 人类交流的符号系统。 - 在CSS中,`lang`属性可以用于选择具有特定语言属性的元素。 **Last...

    MATLAB 函数参考

    - **logspace**: 创建对数等间距的向量。 - **pi**: 圆周率 π 的值。 - **inf**: 正无穷大。 - **nan**: 不是一个数字(Not-a-Number)。 **4.3 时间与日期** - **date**: 当前日期的字符串形式。 - **now**: ...

Global site tag (gtag.js) - Google Analytics