文档章节

Flex文本框自动提示(AutoSuggest)、自动完成(AutoComplete)

ruyees
 ruyees
发布于 2014/10/05 11:47
字数 838
阅读 93
收藏 0
点赞 1
评论 0

做一个小程序要用到Flex文本框自动提示的功能,因为时间不是很紧,所以决定自己动手做这个小组件,花了一个晚上的时间终于完成了。贴出来与大家分享一下。

  虽然网上有不少这样的组件,但自己动手做可以锻炼下思维及动手能力,且老吃现成饭,总感觉不是很爽……废话少说,进入正题。

  组件运行时截图

Flex文本框自动提示(AutoSuggest)、自动完成(AutoComplete)

  设计思路

  思路比较简单,组件分成两个部分,1文本框;2提示的下拉列表;

  自动提示:

  在文本框中输入文字时,在数据源(所有的提示项)查找匹配的选项,若匹配的选项数量>0,在文本框下方显示下拉列表供用户选择;

  自动补全:

  在匹配的选项中选择最合适的一项(通常为第一项),与用户输入做对比,将用户未完成输入的字符补全到文本框中去,并将补全部分字符设置为选中状态;(为什么要处于选中状态,假如补全文字不是用户所需要的,用户只要再往下输文字就可以了,而不用手动删除补上去的文字)

  代码实现(关键点)

  1. 界面的制作,文本框+下拉列表,是不是让人马上联想到了下拉列表框;为了简单起见,我便把Flex中的Combox“伪装”成TextInput,代码如下:

 1private function init(){
    editable=true;
    rowCount=5;
     selectedIndex=-1;

     isTextBoxStringChange=false;
     isfocusInDropDown=false;
     isAutoComplete=false;
     //伪装成TextBox
     setStyle("cornerRadius",0);
     setStyle("arrowButtonWidth",0);
     setStyle("fontWeight","normal");
     setStyle("paddingLeft",0);                    
   }

 

因为ComboBox的长度要比TextInput 宽,也要进行处理一下:

 

 

/** *//**
* 与TextBox同样的宽度
*/ 
override protected function measure():void
{
          super.measure();
          measuredWidth=UIComponent.DEFAULT_MEASURED_WIDTH;    
}

  

 

2. 当文本发生变化时,触发查找匹配项的方法,重写父类的textInput_changeHandler(event:Event)事件。

 /** *//**
 * 文本发生变化时
 */ 
 override protected function textInput_changeHandler(event:Event):void
 {
             if(textInput.text == ""){
                 isTextBoxStringChange=false;
             }
             else{            
                isTextBoxStringChange=true;
            }
            super.textInput_changeHandler(event);
            invalidateProperties();//调用该方法,随后会触发调用commitProperties()
}

 

 

3.进行匹配项的查找,假如控件指定了要进行自动补全则进行自动补全操作。

 override protected function commitProperties():void{
             if(isTextBoxStringChange){
                 prompt=text;
                 filter();                            //进行匹配项的查找
                 if(isAutoComplete&&!isBackSpaceKeyDown){
                     var autoCompleteString:String="";
                     if(dataProvider.length>0)
                     {
                      autoCompleteString=itemToLabel(dataProvider[0]);
                      textInput.setSelection(prompt.length,autoCompleteString.length);
                        prompt=autoCompleteString;                                                    
                    }    
                    else{
                        textInput.setSelection(textInput.selectionEndIndex,textInput.selectionEndIndex);
                    }
                }
                else{
                    textInput.setSelection(textInput.selectionEndIndex,textInput.selectionEndIndex);    
                }
            }                
            super.commitProperties();
}

 

 

4。检查匹配项的数量若不为0,则显示下拉列表,供用户参考选择。

 /** *//**
 * 数据源发生变化,数据不为0弹出下拉列表
 */ 
 override protected function collectionChangeHandler(event:Event):void
 {
             super.collectionChangeHandler(event);
             if(dataProvider.length>0)
             {
                 open();
            }
}

  难点、易出问题点

  1,输入文本框的文字显示不出来,因为系统默认将光标一直放在第一个位置,造成用户输入的文字被取消掉,所以在即使不需要补全是,也要进行textInput.setSelection的操作,如下:

  textInput.setSelection(textInput.selectionEndIndex,textInput.selectionEndIndex);//这一句不是多余的

  2,退格键不起作用,专门为退格键按下作一个FLAG,进行特殊的处理

 /** *//**
 * 处理退格键按下的情况
 */     
 override protected function keyDownHandler(event:KeyboardEvent):void
 {
             if(!event.ctrlKey&&!event.shiftKey)
             {
                 if(event.keyCode == Keyboard.BACKSPACE)
                 {
                    close();
                    isBackSpaceKeyDown=true;
                }
                else
                {
                    isBackSpaceKeyDown=false;
                }
                //当按UP键向上选择时,到达最顶时,显示用户原来所需文字
                if(event.keyCode == Keyboard.UP && selectedIndex==0)
                {
                    selectedIndex=-1;
                }                                
            }
            super.keyDownHandler(event);
}

 

 

本文转载自:http://zuoqiang.iteye.com/blog/777226

共有 人打赏支持
ruyees
粉丝 3
博文 71
码字总数 0
作品 0
深圳
产品经理
FABridge 配置 (js与as通信)

[使用flash builder 4 点击工程-->右键-->创建Ajax Bridge 添加支持] 在开始使用 FABridge 之前,下面提供了可以使用的资料和开发环境。下载最新的 Flex SDK 后,请配置清单 2 中所示的目录结...

SeanCai
2011/03/29
0
1
进一步了解flex布局—来实现这些常见布局吧

  flex布局具有便捷、灵活的特点,熟练的运用flex布局能解决大部分布局问题,这里对一些常用布局场景做一些总结。 web页面布局(topbar + main + footbar) 示例代码   要实现的效果如下:...

LT_bear
05/29
0
0
探究 Flex 组件的生命周期

司 美琴, 开发工程师, IBM 简介: 最为新一代 RIA 技术的典型框架,Adobe Flex 既有传统桌面程序的交互相应性强,健壮性以及容易编程调试的特点,又有着 Web 程序容易部署,更丰富多彩的 UI...

SeanCai
2012/03/08
0
1
css3最全flex布局结构整理

一切都始于这样一个问题:怎样通过 CSS 简单而优雅的实现水平、垂直同时居中。记得刚开始学习 CSS 的时候,看到 float 属性不由得感觉眼前一亮,顺理成章的联想到 Word 文档排版中用到的的左...

韦姣敏
05/03
0
0
还在用浮动吗?CSS flex布局你了解多少?

传统的布局:围绕盒子模型(border、margin、padding) 定位(position)、浮动(float)等。 flex布局又叫弹性布局 , 主要内容包括两大部分有: 容器(父元素)的六个属性和项目(子元素)...

智能机器人蓝梓轩
06/30
0
0
如何做好Flex与Java交互

三种flex4与Java顺利通信的方式是:   flex与普通java类通信RemoteObject;   flex与服务器交互HTTPService;   flex与webservice交互WebService。   当大家尝试使用flex与普通java类...

莫海涌
2014/04/04
0
0
CSS3布局模式:伸缩布局盒(Flexbox)

介绍 Flexbox(伸缩布局盒) 是 CSS3 中一个新的布局模式,为了现代网络中更为复杂的网页需求而设计。本文将介绍 Flexbox 语法的技术细节。浏览器的支持越来越快,所以当 Flexbox 被广泛支持并...

陈微
2013/09/14
0
0
Flexible Box 布局与小程序开发

Flexible Box 布局与小程序开发 参考资料: 1.A Complete Guide to Flexbox BY CHRIS COYIER 2.Flex 布局教程:语法篇 3.Flex 布局教程:实例篇 4.A Visual Guide to CSS3 Flexbox Propertie......

坚果jimbowhy
05/27
0
0
2010(Flex 初次使用 小节:No.2)

接这上一篇继续... 2 借助第三方的对象文件 swfobject.js 来向swf 传参 超链接的方式传参 <a href="VideoPlay.html?address=http://www.lxzq.com.cn/video/ty20100915_1.flv">Test</a> 接收参......

Zofda
2012/02/28
0
0
《Hello Flex 4》笔记——1 Getting started

不要被篇幅吓到,内容比较基础,代码易读,提醒下自己 - -||| 开始看之前先把Flash Builder装上了... Why Flex 4?(这是为什么呢) Flex 4 is a sexy framework that lets you write code tha...

豆仔
2012/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

打印斐波那契数

package com.jerry.ch04;public class PrintFibonacci {public static void main(String[] args) {for (int i=0; i<10; i++) {System.out.print(fib(i) + " ");}......

JerryNing
12分钟前
0
0
shell编程

一、shell脚本介绍

人在艹木中
13分钟前
0
0
istio 0.8 遥测 案例

==============遥测===================================== 演示如何从网格中收集遥测信息。 分布式跟踪。如何配置代理以向Zipkin或Jaeger发送跟踪请求 收集度量标准和日志。此任务说明如何配...

xiaomin0322
15分钟前
0
0
ND4J求多元线性回归以及GPU和CPU计算性能对比

上一篇博客《梯度下降法求多元线性回归及Java实现》简单了介绍了梯度下降法,并用Java实现了一个梯度下降法求回归的例子。本篇博客,尝试用dl4j的张量运算库nd4j来实现梯度下降法求多元线性回...

冷血狂魔
16分钟前
0
0
springboot常用注解

@SpringBootApplication: 包含@Configuration、@EnableAutoConfiguration、@ComponentScan 通常用在主类上。 @Service: 用于标注业务层组件。 @RestController: 用于标注控制层组件(如strut...

GoldenVein
22分钟前
1
0
如何进行大数据的入门级学习?

不知道你是计算机专业应届生还是已经从业者。总之,有java基础的学生学习大数据会轻松很多,零基础的小白都需要从java和linux学起。 如果你是一个学习能力特别强,而且自律性也很强的人的话可...

董黎明
36分钟前
0
0
使用Parcelable传递复杂参数

最近做AIDL传递对象,对象必须实现Parcelable的方法才可以被传递。 @Override    public int describeContents() {//这个 默认返回0就行了。        return 0;    }    ...

火云
37分钟前
0
0
十大Intellij IDEA快捷键

Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论。每个人都有自己的最爱,想排出个理想的榜单还真是困难。以前也整理过Intellij的快捷键,这次就按照我日常开发...

HJCui
47分钟前
0
0
word 使用mathtype 编写 数学公式

下载安装,这个链接命名。。。。 http://www.mathtype.cn/xiazai.html 安装之后会多出一个选项 使用内联方式插入图表 编写公式的界面 设置支持latex 语法 输入公式回车就可以看到结果...

阿豪boy
今天
0
0
Promise

定义 Promise是异步编程的一种解决方案,所谓Promise就是一个容器,里面保存着某个未来才会结束的事件(通常是一个一步操作)的结果。 特点: 2.1 对象的状态不受外界影响,三种状态pending...

litCabbage
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部