在很多自定义的组件中需要动态的计算字符串的实际宽度,如果字符串都是汉字那么可以利用String.length*汉字大小,但是在实际的应用中中英文相结合是很常见的事情。
案例如下:
<mx:TileList width="100%" height="100%" dataProvider="{chArr}" borderStyle="none" id="tl" columnWidth="100" >
<mx:itemRenderer>
<mx:Component>
<mx:HBox horizontalAlign="left">
<mx:CheckBox selected="{data.select}" click="data.select=!data.select" label="{data.key}"/>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>
TileList 的数据源是动态的,因此每行显示的列数也是动态的,这就需要动态的计算columnWidth,
columnWidth=字符串所占最大实际宽度+其他组件的宽度。
笔者第一次计算的时候就犯了一个错误,首先计算出字符串所占得字节数,一个汉字占2个字节,然后总的字节数*字体大小。
计算一个字符串所占的字节数长度如下:
/**
* 计算出双字节字符的长度
* 得到一个字符串的长度 一个汉字占2个字节
* @param sChars 字符串
* @return 字符串所占的长度
*/
private function getStrActualLen(sChars:String):int{
return sChars.replace(/[^\x00-\xff]/g,"xx").length;
}
以上算法如果都是汉字不会出现问题,如果都是英文就会出现字符串所占实际宽度大大小于columnWidth。
经过自己的一番研究,可以从flex的as3帮助文档中找到答案,flash.text.TextLineMetrics类负责测量字符串所占的实际宽度。
有关详细信息请自己参考API.
measureText(字符串)方法返回TextLineMetrics的实例,TextLineMetrics类的width返回字符串所占的实际宽度,Flex的显示组件一般都继承自UIComponent组件,UIComponent类含有measureText方法,因此可以直接使用this.measureText(字符串).
var maxStrLength:int=0;//最大宽度
for(var i:int=0;i<ac.length;i++){
var item:Object=ac.getItemAt(i);
item.name= item[param.name];
var objLen:int=this.measureText(item.name).width;
if(objLen>maxStrLength){
maxStrLength=objLen;
}
if(isFirst){
item.sel=false;
}
ac.setItemAt(item,i);
}
- 大小: 44.7 KB
分享到:
相关推荐
计算字符串宽度,输入一个字符串,计算该字符串宽度,不是字符数量,也不是lenth,是字符串的宽度,单位是像素
QT字符串设置固定宽度,前位补0.7zQT字符串设置固定宽度,前位补0.7z
C#字符串删除指定字符串|C#字符串删除子字符串
java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java ...
qt例程字符串设置固定宽度,前位补0.7z
js计算字符串长度,可以输入中文、英文、数字、中英文数字混合等,最后计算结果为字符串所占字节个数
* 使用一个字符串分割另一个字符串 * * @param delimiter 边界上的分隔字符 * @param haystack 输入的字符串 * @param out 输出的字符串指针 * @return 分割成了多少个成员 */ int explode(char *delimiter, ...
输入一个字符串参数,返回该字符串的反序字符串
编写程序:从键盘上输入一个包含10个字符的字符串,把该字符串与程序中给定的字符串("bacdbcabca") //依次比较,统计两个字符串对应字符相等的数目。...//并输出所统计的两个字符串中相等字符的数目。
字符串 介绍 字符串 介绍 字符串 介绍 字符串 介绍
求两个字符串的最长公共字符串 输出全部位置信息,并输出字符串,相同字符串先输出所有位置信息在输出字符串 测试平台:XP/VS 2008 CN
纯C语言实现字符串拆分操作,把字符串拆分成字符串数组,然后再输出。 使用sstream方法,作为底层驱动操作实现非常方便。
#c语言#的问题:输出格式输出提取出来的数字字符串,每个连续数字字符串占一行(相关搜索:字符串长度|输入字符串 #c语言#的问题:输出格式输出提取出来的数字字符串,每个连续数字字符串占一行(相关搜索:字符串...
给写了2个方法,一个是直接截取单个需要的字符串,比如字符串string a="ab123456",我只需要提取3,那么就是单独截取就可以了,从2开始到4结束就行。 第二个是把所有的符合条件的字符串都截取出来,提取出来,比如...
必须实现如下操作,字符串比较、求串的长度、判断串是否为空、将串置空、字符串赋值(包括两个字符串类复制,一个字符串赋值到CmyString对象)、求字符串中的一个字符或改变字符串中的一个字符(采用重载[]),...
字符串数组 matlabMATLAB字符串数组 基本规则 (1)所有字符串都用单引号(英文状态下输入)括起来; (2)将字符串当作一个行向量,每个元素对应一个字符,其标识方法和数值向量相同。 (3)size指令获得串数组的大小。串...
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1。 方法二:match() var str = "123" var reg = RegExp(/3/); if(str.match(reg)){ //包含; } ...
易语言字符串操作源码,字符串操作,字符串_取长度,字符串_取中间,字符串_取左边,字符串_取右边,字符串_替换,到宽字符,到多字节,取文本数据地址,取字节集数据地址,MultiByteToWideChar,WideCharToMultiByte
一个关于字符串匹配的算法,已经经过编译,希望对你有帮助
串口接收字符串控制LED。通过STM32 串口1 接收字符串实现LED控制,程序通过判断\n识别字符串是否发送完成,所以串口调试助手上需勾选发送新行,发送LED1+ON点亮LED1,发送LED1+OFF关闭LED1