List使用教程

发布时间:2015-10-30

       《使用编辑器制作界面》文章中提到,List最常用的组件之一,同时也是Morn最复杂,最灵活的组件。

制作简单List


下面通过Morn Builder制作简单list

1.在视图内拖动一个Clip和一个Label组件

 morn_list_1.jpg

2.同时选中他们,Ctrl+B转换为Box容器,并命名为render(Box转换请参考教材《容器的使用及自定义Tab,RadioGroup,List,ViewStack》)  

 morn_list_2.jpg

3.再选择这个Box,Ctrl+B转换为list,然后设置repeatX,repeatY,spaceX,spaceY属  

morn_list_3.jpg

这样一个list就做完了。

其中repeatX,repeatY分别是列表项x,y方向每页最多显示的数量,spaceX和spaceY是列表项之间的间隔值


给List增加滚动条

双击上述list,进入list内部,然后拖动一个垂直滚动条,然后命名为scrollBar

morn_list_4.jpg


2.在双击list区域外任意位置,就返回到了list视图    

morn_list_5.jpg

这样就完成了list的滚动条添加,list会自动识别这个滚动条。操作完全可视化,很简单吧。

控制List显示:List赋值

《Morn组件赋值》中讲到了list的赋值方法,通过list赋值,就能控制list的显示内容。比如把上述list内的Clip命名为icon1,Label命名为label1,可以这样赋值项的默认属性:

list.array = [{icon1:1,label1:"label1"},{icon1:2,label1:"label2"},{icon1:3,label1:"label3"},{icon1:4,label1:"label4"},{icon1:5,label1:"label5"},{icon1:6,label1:"label6"}];

运行结果如下:

morn_list_6.jpg

自定义List渲染:renderHandler的用法

上述通过赋值,我们控制了对list渲染的显示,我们还可以不用赋值的方式,用自定义的方式实现list渲染,代码如下:

在构造函数中增加如下代码:

list.renderHandler = new Handler(listRender);//自定义渲染方式

list.array = ["label1", "label2", "label3", "label4", "label5", "label6"];//赋值

然后处理这个自定义渲染函数

 /**自定义List项渲染*/
private function listRender(item:Component, index:int):void 
{
  if (index < list.length) 
  {
     var icon:Clip = item.getChildByName("icon1") as Clip;
     icon.frame = index + 1;
     var label:Label = item.getChildByName("label1") as Label;
     label.text = list.array[index];
  }
}


效果如下图: 

morn_list_6.jpg

显示效果和上例的效果一样,在listRender内部,可以做很多自定义的逻辑处理,实现任意想要的功能,很灵活吧。


利用页面嵌套(又称自定义控件),动态创建list

无论赋值的方式还是自定义渲染的方式,处理list都非常方便

同时list还支持页面嵌套作为list渲染项,封装list项的处理逻辑

1.创建一个页面,命名为Test2,内部拖动一个Clip和Label组件,分别命名为icon1和label1

morn_list_7.jpg

2.拖动这个Test2页面到Test1内部,然后命名为render  

morn_list_8.jpg

3. 再拖动一个滚动条,命名为scrollBar,全选并Ctrl+B转换为List,然后设置list的repeatX,repeatY,spaceX,spaceY属性(操作和第一个例子相同),得到如下结果: 

morn_list_10.jpg


4.把list的var设置为list以方便引用,然后对list赋值

list.array = [{icon1:1,label1:"label1"},{icon1:2,label1:"label2"},
{icon1:3,label1:"label3"},{icon1:4,label1:"label4"},{icon1:5,label1:"label5"},
{icon1:6,label1:"label6"}];

最终效果如下:

morn_list_6.jpg

    效果和上面两个例子相同

这样做的好处是,可以在运行时更改list的repeatX,repeatY,spaceX,spaceY属性,来动态改变list,还可以在Test2的逻辑类里面封装复杂逻辑(需要设置页面嵌套的runtime为逻辑类,页面嵌套详细介绍请参考《页面嵌套的使用》)。

     在List内增加鼠标滑过效果和选中效果list项还支持鼠标滑过效果和选中效果,只需简单设置即可实现

1.准备一个两帧的Clip,作为list项的背景,第一态是鼠标经过效果,第二态为选中效果

morn_list_12.jpg

2.拖动这个Clip到list项的最底部,并命名为selectBox。

morn_list_13.jpg

这样就完成了,效果如下: 

morn_list_14.jpg

  基本上无需额外代码,就实现了鼠标经过和选中效果,是不是很简单呢当然还可以通过自定义renderHandler的方式做更为复杂的逻辑和操作处理。


自定义List显示

         如果list每个项都需个性化显示,或者他们的位置不是规则分布的,那么我们可以通过自定义的方式实现list

       List自定义显示的方式和Tab,RadioGroup,ViewStack自定义过程是一样的,详细参考容器使用与自定义组件》

     这里就不再重复了,灵活应用list,你能做出很多很棒的效果,现在就开始吧