`
superwulei
  • 浏览: 108071 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

为列表选中项添加图标

阅读更多

继为List添加序号之后,老总又提出了新的要求:为列表中的当前选中项添加一个指示图标。

在得到正确解决方案之前,我因此苦恼了两天。尝试了许多种方法,都没有得到理想的结果。但是把基本问题搞清楚了,为列表中的当前选项添加指示图标,情况有三种:

1. 列表项之间切换时(鼠标点击列表项,或通过键盘上下选中列表项)

2. 新添加列表项

3. 删除列表项

第一个比较好解决,但是第2个和第3个问题看似简单,但做起来却经常和第一个发生冲突。

 

艰难的求解里程不在此多说了,直接切入主题。

还好感谢《Flex 3 Cookbook中文版》第五章13节所讲解的内容。其实不必自己去想的那么多,List组件中有两个“效果”我们应该能够注意到:一个是当列表项被选中的效果,另一个是当鼠标移到列表项但还未选中(点击)的效果。其中drawHighlightIndicator就是还未选中的效果(高亮效果),drawSelectionIndicator是选中的效果。这两个效果被封装在这两个方法中,代码如下:

<mx:List xmlns:mx="http://www.adobe.com/2006/mxml" selectionColor="#ffcccc">
    <mx:Script>
        <![CDATA[

            import mx.controls.listClasses.IListItemRenderer;

            [Embed("../../assets/outline_arrow.gif")]
            private var img:Class;

            [Embed("../../assets/in_arrow.gif")]
            private var highlight_img:Class;

            override protected function drawHighlightIndicator(indicator:Sprite, 
x:Number, y:Number, width:Number, height:Number, color:uint, itemRenderer:IListItem
Renderer):void
            {
                var this_img:Object = new highlight_img();
                indicator.addChild((this_img as DisplayObject));
                (this_img as DisplayObject).x = itemRenderer.width - (this_img as Disp
layObject).width
                super.drawHighlightIndicator(indicator, x, y, width, height, 0xff0000,
itemRenderer);
            }

            override protected function drawSelectionIndicator(indicator:Sprite, 
x:Number, y:Number, width:Number, height:Number, color:uint, itemRenderer:
IListItemRenderer):void
            {
                var this_img:Object = new img();
                indicator.addChild((this_img as DisplayObject));
                (this_img as DisplayObject).x = itemRenderer.width - (this_img as 
DisplayObject).width
                super.drawSelectionIndicator(indicator, x, y, width, height, 0xffcccc,
itemRenderer);
            }

        ]]>
    </mx:Script>
</mx:List>

 indicator.addChild(...)是将图像加入到渲染器中,紧接着的一行是图像的位置,然后通过调用父类方法传递参数并改变选中和高亮颜色。有了这个方法,我的苦思冥想真是不值得。荀子曰:“吾尝终日而思矣,不如须臾之所学也。”,此话是也。

分享到:
评论
1 楼 svafly 2011-02-17  
每次都会addchild,重叠上去了啊。。。。。

相关推荐

    同步列表选中项及EditText监听

    在Android开发中,"同步列表选中项及EditText监听"是一个常见的交互设计,涉及到多个UI组件的协同工作和事件处理。下面将详细讲解这个主题所涵盖的知识点。 首先,我们来看"列表选中项同步"。这通常指的是在一个...

    动态添加、删除树控件的节点,获取树形控件的选中项

    本篇文章将详细讲解如何在MFC中动态添加、删除树控件的节点以及获取树形控件的选中项。 首先,要动态添加树控件节点,我们需要了解`CTreeCtrl`类,它是MFC封装的树控件。添加节点通常涉及以下几个步骤: 1. 创建新...

    VB菜单中添加小图标

    在VB(Visual Basic)编程环境中,为菜单项添加小图标是一项常见的美化用户界面的操作。这不仅可以提高程序的视觉吸引力,还可以帮助用户更快地识别和理解菜单功能。下面将详细介绍如何在VB菜单中添加小图标。 首先...

    VB向菜单中添加图标的实例

    在VB(Visual Basic)编程中,为菜单项添加图标是一项常见的任务,这可以增强用户界面的视觉效果,提高用户体验。本实例将详细讲解如何在VB应用程序中为菜单项添加图标。 首先,我们需要理解VB的基本控件和事件处理...

    ListView 选中改变图标

    通过以上步骤,我们可以在ListView中实现选中项图标的变化,为用户提供明确的交互反馈。这个过程涉及到了Android的基础知识,包括Adapter模式、事件监听、视图复用以及资源管理等,对于Android开发者来说是必备技能...

    使用列表控件添加和选择数据项

    例如,ListView可以设置为小图标、大图标、列表或详细信息视图。同时,可以通过设置字体、颜色、图像等样式来提升用户体验。 8. **性能优化**: 当处理大量数据时,要注意性能优化。虚拟化技术可以提高大型列表的...

    VC 为TreeView菜单节点添加图标修饰.rar

    要为TreeView控件的节点添加图标,我们需要做以下几步: 1. **资源准备**:首先,你需要准备图标资源。这些图标可以是ICO文件或位图资源,需要在项目的资源文件(如.rc)中定义。例如,你可以创建两个资源ID,如IDI...

    下拉列表中显示图标

    例如,在React中,你可以创建一个`CustomSelect`组件,使用`state`来管理选中项,并通过JSX结构来渲染选项,每个选项包含文本和图标。 5. **资源管理**: 图标资源通常以图片、SVG或者字体图标的形式存在。在代码...

    VC++在列表控件中整行选中源码实例

    这些方法可以帮助我们添加、修改和管理列表项。 2. **整行选中实现**: 在Windows API中,可以通过设置LVITEM结构的state和stateMask字段来改变列表项的状态。对于整行选中,我们需要设置LVIS_SELECTED和LVIS_...

    易语言源码图片转超级列表框大图标.rar

    例如,当用户点击超级列表框时,程序可能会触发一个事件处理函数,该函数负责根据选中的项来显示或处理相应的图像。 5. **界面设计**:易语言提供了丰富的图形用户界面(GUI)元素,可以用来创建直观的应用程序。在...

    Qt+QListWidget实现列表数据添加删除(源码+详细注释)

    在实际操作中,为了确保用户交互的友好性,我们还需要添加一些额外的逻辑,例如检查是否真的有选中项,或者在删除前询问用户的确认。同时,为了防止数据丢失,可能需要在数据模型(如QVector或QStringList)中维护一...

    C#中实现在combobox显示图标

    你需要为`ComboBoxWithImages`添加图标集,然后将每个组合框项与相应的图标关联。例如: ```csharp // 初始化控件 ComboBoxWithImages myComboBox = new ComboBoxWithImages(); myComboBox.ImageList = new ...

    protel添加快捷图标的方法

    接下来,你需要在右侧的列表中找到你希望添加为快捷图标的特定功能。以“删除”功能为例,首先需要在菜单中找到其位置。通常,“删除”功能位于“编辑”菜单下,因此你需要双击“编辑”来展开其子菜单,直到找到...

    vc++6.0给程序添加图标,控制台程序也行

    ### 使用VC++6.0为程序添加图标的方法 在软件开发过程中,为程序添加图标不仅可以提升应用程序的专业性和用户体验,还能让程序在众多软件中脱颖而出。本文将详细介绍如何使用VC++6.0为程序添加图标,包括控制台程序...

    VC编程实现使用列表控件添加和选择数据项

    - 列表控件可以显示图标,通过创建`CImageList`对象并使用`SetImageList`函数关联到列表控件,可以添加图标资源。 8. **自定义视图**: - 列表控件支持自定义视图,可以创建子类化的`CListCtrl`,重写`OnDrawItem...

    在VB6生成的菜单上加上浮动图标的控件&nbsp;

    此外,可能还需要考虑在不同状态下显示不同的图标,例如在菜单项被选中或悬停时显示不同的浮动效果。 为了充分利用这个控件,开发者需要熟悉其文档和示例代码,理解每个属性和方法的作用,以及如何结合VB6的事件...

    自定义带图标的select,只需把图标地址写在option的title属性中即可

    本案例中,我们将讨论一个基于jQuery的自定义下拉框JS插件,它允许我们为`&lt;select&gt;`元素添加图标,使得选择项更加直观且富有表现力。标题"自定义带图标的select,只需把图标地址写在option的title属性中即可"揭示了...

    ListBox 支持图标

    这些事件可能需要获取选中项的图标和文本,可以通过`GetCurSel`和`GetText`方法结合索引来实现。 通过以上步骤,我们就可以在VC++环境中创建一个支持图标的`ListBox`控件。这种方法增强了`ListBox`的功能,使得它...

    C# ListView实现图标各种视图显示

    1. **添加图标**: 在C#中,我们可以使用ImageList组件来存储和管理图标。首先创建一个ImageList对象,然后将所需的图标添加到ImageList中。通过设置ListView的SmallImageList或LargeImageList属性,可以将ImageList...

    VC实现菜单项前面有图标的一个例子

    在Windows编程中,特别是在使用Visual C++(VC)进行开发时,给菜单项添加图标是一项常见的需求,可以增强用户界面的美观性和可识别性。本文将深入探讨如何在VC环境下实现这一功能,主要关注以下几个方面: 1. **...

Global site tag (gtag.js) - Google Analytics