在很多自定义的组件中需要动态的计算字符串的实际宽度,如果字符串都是汉字那么可以利用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
分享到:
相关推荐
标题"Node.js-string-width-得到字符串的视觉宽度显示所需的列数"表明这个库主要关注的是如何在Node.js环境中确定字符串在终端显示时的宽度。这涉及到字符编码的理解,因为不同的字符可能占用不同的空间。例如,英文...
### 数字转换为字符串 #### 概述 在编程领域,数据类型的转换是十分常见的操作。特别是当需要将数字(整数、浮点数等)转换为字符串时,这一过程对于构建用户界面、生成报告或是进行网络通信尤为重要。C语言中的`...
- 可以通过遍历字符串中的每个字符,并根据字符类型(如中文、英文等)来计算其在显示时所占的宽度。 - 需要注意的是,不同字体和字号下字符的宽度可能会有所不同。 **实现思路**: ```javascript String.prototype...
这个数值不包括结束符,对于ASCII编码的字符串,一般每个字符占一个字节。 2. **字符串宽度**:字符串宽度则与字体、字号和字符编码有关。在易语言中,如果需要计算字符串在屏幕上的宽度,通常需要调用GUI相关的...
3. **换行处理**:对于每一个遍历到的字符,根据其类型计算其所占的宽度,并累加到总宽度中。当总宽度达到预设值时,添加换行符。 #### 三、代码实现 下面是具体的代码实现示例: ```javascript // 示例字符串 ...
在实际应用中,例如从串口接收单片机发送的16进制数据时,可以使用`sprintf`函数将接收到的字节转化为16进制字符串,如示例所示。这通过在循环中使用`%02x`格式化规定符,确保每个字节都以两位的十六进制数形式输出...
- 根据输入的宽度计算每个项目名称和价格所占的宽度。 - 使用格式化字符串来格式化和打印列表中的每一项。 以上知识点涉及了Python字符串操作的基本方法和高级特性,对于学习和使用Python进行数据处理和文本操作...
需要注意的是,这个方法仅适用于基于字节的宽度计算,实际应用中,你可能还需要结合特定字体的字宽信息来更准确地计算字符串宽度。例如,你可以使用GDI+或者WPF中的`Graphics`类来测量字符串的尺寸。在这些图形库中...
为了使得字符串在显示时能够保持一定的格式或者达到特定的宽度,Python提供了多种字符串格式化的方法,其中`rjust()`、`ljust()`和`center()`就是用来控制字符串对齐方式并填充空白字符的方法。 #### 一、rjust() ...
如果计算的实际宽度超过目标长度,则适当减少截取的字符数量,确保最终截取的字符串不会出现乱码或不完整的情况。 ### 三、代码示例解析 #### 1. `InterceptString` 方法 该方法实现了上述逻辑的核心部分,具体...
+ width:指定输出数据时所占的宽度。 + precision:如果后面存在 type 参数,则指的是保留小数的位数,如果 type 参数不存在,则是指有效数字的位数。 + type:指定输出数据的具体类型。 实例 * 使用数字占位...
在示例中,`mb_strlen($zhStr,'UTF-8')`将返回字符串 `$zhStr` 中的实际字符数,无论这些字符是英文还是中文,这使得它在处理包含中文字符的字符串时非常有用。 接下来,我们来看一个混合中英文字符串的例子。`$str...
示例代码中定义了`u8_title_substr`函数,通过循环遍历字符串中的每个字符,根据字符的编码类型(1、2、3或4字节)累加相应的权重值,最终实现了等宽度截取UTF-8编码的中英文字符的功能。 #### 五、注意事项 - 在...
同时,`[width]`可以用来控制输出的字段宽度,如`%6s`会让字符串至少占6个字符的宽度。如果`width`超过了实际字符串的长度,多余的空格会被填充;如果字符串长度超过`width`,则会按原样输出。 Format函数还支持`....
* 用 %ws 输出一个字符串,w 是宽度值,如 w>0 则右对齐,w则左对齐,如 w 的宽度小于实际字符串占的位数,则按实际宽度输出。 这些知识点涵盖了 Python 语言基础中的基本输入输出、基本数据类型和格式化输出等...
此外,与英文字符相比,中文字符和全角符号在显示时所占的空间不同,因此截取时需要按照字符的实际显示宽度来计算。 ### HTML代码串的特殊性 在处理HTML代码串时,需要特别注意HTML标签的存在。截取时不仅要保留...
在实际应用中,为了保证`localStorage`中的数据格式正确,我们还需要在`getTableColWidth`方法中解析存储的数据,可能需要处理JSON字符串,确保数组格式正确。同时,我们也需要考虑到数据安全和兼容性问题,例如,当...
因此,计算字符串宽度时,我们不能简单地以字节为单位,而需要识别每个字符的实际宽度。 计算屏幕列数的过程一般涉及以下几个步骤: 1. **字节解码**:遍历字符串,根据编码规则将字节序列转换为字符。 2. **宽...
因此,在处理包含这类字符的字符串时,我们需要采用不同的方式来计算字符串的实际长度。 #### 二、使用正则表达式判断中文和全角字符 在Flex中,可以通过正则表达式来检测字符串中是否包含中文或全角字符。正则...
在Python中,`len()` 函数只能提供字符串中的字符数量,而不能直接给出这些字符所占的实际宽度。这是因为不同的字符在屏幕上显示时所占的空间是不一样的。比如中文字符通常占据两个英文字符的位置。因此,我们需要一...