29
2015
06

Flex tree叶节点缩进(ItemRenderer应用)

tree组件默认显示效果是这样的,设计人员设计的效果是这样的,仔细对比一下,不难发现两者的区别(设计效果相对于默认效果):

1)去掉了文件夹图标;

2)叶节点向左缩进,和小三角图标是对齐的;

3)图标、文字颜色不同。

关于修改图标和文字颜色,直接用style就可以实现。去掉文件夹图标也可以通过style实现,难点在于如何让叶节点向左缩进。

Tree的style中的indentation只能实现整体的缩进,无法达到想要的效果。然后就想到了用ItemRenderer,新建一个类文件CustomTreeItemRenderer.as 继承TreeItemRenderer,然后设置Tree的itemRenderer="CustomTreeItemRenderer"。CustomTreeItemRenderer.as代码如下。


package
{
	import mx.controls.treeClasses.TreeItemRenderer;
	import mx.controls.treeClasses.TreeListData;

	public class CustomTreeItemRenderer extends TreeItemRenderer
	{
		public function CustomTreeItemRenderer()
		{
			super();
		}
		/**
		 *  @private
		 */
		override protected function updateDisplayList(unscaledWidth:Number,
													  unscaledHeight:Number):void
		{
			super.updateDisplayList(unscaledWidth, unscaledHeight);

			var startx:Number = data ? TreeListData( listData ).indent : 0;
			if (disclosureIcon)
			{
				disclosureIcon.x = startx;
				disclosureIcon.visible = data ?
					TreeListData( listData ).hasChildren :
					false;
				if(disclosureIcon.visible){
					startx = disclosureIcon.x + disclosureIcon.width;
				}

				disclosureIcon.setActualSize(disclosureIcon.width,
					disclosureIcon.height);

			}

			if (icon)
			{
				icon.x = startx;
				startx = icon.x + icon.measuredWidth;
				icon.setActualSize(icon.measuredWidth, icon.measuredHeight);
			}

			label.x = startx ;

		}
	}
}

关键在于这句:

disclosureIcon.visible = data ?TreeListData( listData ).hasChildren :false;

if(disclosureIcon.visible){
    startx = disclosureIcon.x + disclosureIcon.width;
}

先设置disclosureIcon的visible属性,有子节点的显示disclosureIcon,没有子节点的,不显示。猜也能猜出来disclosureIcon就是那个文件夹图标。如果文件夹图标显示,startx向右挪,如果文件夹图标不显示,startx就不用向右挪。这样就实现了叶节点和兄弟节点的小三角对齐。


参考:Flex4_Tree组件2(添加多选框、修改树图标)


« 上一篇下一篇 »

相关文章:

xmind数据提取  (2016-8-18 16:2:10)

按下拖动双击编辑  (2016-4-21 9:31:28)

PopUpManager弹窗  (2016-4-21 9:15:22)

tree组件拖动改变节点顺序  (2016-4-21 8:52:5)

FLEX 迷你教程 — 基于STRATUS的P2P网络电话(转)  (2016-3-1 11:10:6)

flex动态换肤  (2015-6-23 11:14:51)

给Flex中的Tree组件加虚线   (2015-6-18 15:49:24)

Flex tree加三状态的Checkbox  (2015-6-18 11:58:37)

在flash builder中将flex项目导出单独的swf文件  (2015-6-13 11:52:24)

flex 4中如何让panel居中显示  (2015-6-3 14:53:32)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。