- 浏览: 679468 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
shappy1978:
自己踩死自己了,我还是有远见的嘛
该死的微软,该死的IE -
calosteward:
I know Zxing and shopsavvy, bot ...
[trans]COMPARISON OF MOBILE BARCODE SCANNERS -
qq690388648:
唉……四年前的Bug,现在还没改,Apache也有不足的地方啊 ...
POI解析Word表格备忘 -
shappy1978:
Now I get to say that every met ...
Jailbreak Detection on iOS -
hebeixiaolei:
你好,我想问一下,用poi如何往word文档里插入超链接呀!
POI读取Word文档总结
textarea对于中文结尾(断行处刚好是中文)无法正常断行,要解决这个问题,必须了解textarea是如何断行的,实际上查看其代码知道,展示时是通过splitWords函数把文字全部解析为单词,每个单词作为一个text对象添加到frame中,由于单词按照空格间隔,所以无法断中文的"单词".原来TextArea的源码中分词函数如下:
private void splitWords(String fullText, int style) { int beginIndex = 0; int endIndex = 0; String word; do { endIndex = fullText.indexOf(' ', beginIndex); if (endIndex == -1) { word = fullText.substring(beginIndex); } else { word = fullText.substring(beginIndex, endIndex); } if (word.length() != 0) { Text textWidget = new Text(); textWidget.setText(word); if (style != Font.STYLE_PLAIN) { textWidget.setDefaultFontStyle(style); } add(textWidget); } beginIndex = endIndex + 1; } while (endIndex != -1); }
Kuix的论坛上提供了下面的替换函数解决中文断行的问题.
private void splitWords(String fullText, int style) { String str = fullText;//+" "; String word=""; int len = str.length()-1; for (int i = 0; i <= len; i++) { char ch = str.charAt(i); if(i!=len) word = word + ch; if ((ch >= 48 && ch <= 57) || (ch >= 65 && ch <= 90) || (ch >= 97 && ch <= 122)) continue; if (word.length() != 0 || i==len) { Text textWidget = new Text(); textWidget.setText(word); if (style != Font.STYLE_PLAIN) { textWidget.setDefaultFontStyle(style); } add(textWidget); word = ""; } } }
应该说是做的很差的函数,对于数字,大小写26个英文子母外的其他字符都作为word的分隔符,这是相当有问题的,实际上应该把中文区间和空格作为分隔的基础,这个方法本身还有一个更大的缺陷,注意到原文的英文式分词是不把空格加进去的,也就是说Kuix默认会把每个text控件用一个空格的间隔分隔开了,所以替换为上述函数的结果就是显示中文虽然可以正常换行,但是每个中文之间都会有一个空格间隔着,看起来不美观,而且也很浪费空间.
那么这个"隐藏"的空格是哪里来的,查TextArea的源代码,发现getGap的函数很有意思,不是继承Widget从样式中获取,而是直接获得空格的宽度,所以实际上TextArea容器中每个widget的间隔就是一个空格,修改getGap函数可以去掉空格:
/* (non-Javadoc) * @see org.kalmeo.kuix.widget.Widget#getGap() */ public Gap getGap() { if (cachedGap == null) { // cachedGap = new Gap(getFont().charWidth(' '), 0); cachedGap = new Gap(0, 0); } return cachedGap; }
这样可以去掉中文之间的间隔,但是如果你试着去读取6,7页中文数据的话,立马就会报告Out of memory的错误,每个中文创建一个Text显然是相当浪费的,更完美的解决方案当然是自己断行.这里顺便说一下Kuix的标签和分行机制,首先看一下我的一个测试断行的分析描述:
1 无标签时支持<break/> 2 textarea不支持<break/>,不继承上一级容器的align属性,默认align是top,有中文时断行错误,出现只有很少文字的一行. 3 对英文断行也有缺陷,如果第一个单词就过长,会超出界限 4 多个空格也认为是1个空格,不支持回车,\n,<br>会保错 5 有意思的属性styled,default false,用途 Define if the text area use pseudo html style syntax. The value is a boolean (true or false). 假冒html样式?似乎是采用html的样式?整个reflow()函数都在为这个属性服务
测试结果发现textarea似乎支持有限的html标签,实际上支持的html标签包括 img,i,b,strong,u,br,p,div等,也就是说对html标签的支持只包含字体,段落回车和图片。但是如果直接写在标签中都必须做转义才能使用,否则会报Unknow tag的错误,比如<br/>必须转义为<;br/>;还有另外一种形式可以不用转义,此时可以直接写入html标签和<break/>,如下:
<textarea style="align:top-left"><![CDATA[test<br>new line]]></textarea>
这个是题外话,需要进一步了解请自行看TextArea.reflow和LightXmlParser的代码,注意到reflow大多数的代码其实都是解析和实现简单的html标签。
Kuix断行实际上是依靠text来实现的,textarea只不过保证英文单词不被拆分在不同的行,而且猜测默认都是采用flowlayout来实行布局。要实现软回车,必须自己加上Kuix的标准标签<break></break>.而这个标签上面说过,在textarea的内容中也是不支持的.那么要实现中文断行,而且效果较好的话,就只能自己根据屏幕大小和字体断行,另外TextArea还有一个问题就是本身不支持textfield的编辑功能,这也是一个相当大的缺陷,作者说是因为两者展示时采用的方法不同,要实现它的编辑功能,必须另外弹出一个窗口进行编辑,具体方法不再提供,这里只分析Kuix的断行的处理方式,大家可以从网上另外找寻中文断行的代码参考.
评论
KUIX好久没更新了,我也很久没用了。不知道是不是停了。
发表评论
-
关于BlackBerry在线讲座的观感
2011-03-24 16:20 867整体印象:夸夸其谈,自我陶醉,缺乏特色,迟早步palm, ... -
【转】Zxing介绍
2011-02-28 11:13 2334源地址:http://blessdyb ... -
关于Android上的虚拟机(Kuix)
2011-01-17 12:00 1740个人对于Android的 ... -
Kuix贴士
2010-12-07 14:48 1282发现TextField有onchan ... -
Kuix组件Choice发现一个新的bug
2010-11-16 09:52 1027本来想偷懒,利用choice ... -
J2ME 3.0发布了,不过好冷
2010-10-22 17:41 1056http://java.sun.com/javame/down ... -
Kuix在魅族上的安装
2010-06-18 17:11 1009今天第一次在一台魅族上安装我的程序,结果不管是签名还是 ... -
关于J2ME的外部调用
2010-04-28 14:20 1557一开始学习J2ME的时候就问过一些“高手”们,如何调用 ... -
POI word目录处理备忘
2010-04-07 10:57 3321今天发现word文件的目录处理还不完善,原来只是想着完 ... -
5800入手小记
2010-03-26 16:18 1241我去年的这个时候很恶 ... -
J2ME签名备忘
2010-03-15 14:21 1405今天拿到VeriSign的签名,使用过程中碰到几个问题 ... -
J2ME签名备忘
2010-03-01 17:15 0Thawte代码签名证书操作指南 http://www.it ... -
Kuix TableLayout bug说明(2)
2010-01-28 11:24 1339今天又测试出TableLayout 的一个bug,如果表 ... -
Kuix TableLayout bug说明
2010-01-26 16:53 1827实际上用过TableLayout来作表格的人估计都碰到 ... -
Kuix ScrollPane修改备忘录
2010-01-20 09:00 1560本次修改目标:为ScrollPane增加横向和纵向两个滚 ... -
关于Kuix如何确定Widget的大小探讨
2010-01-14 16:20 1775由于Kuix作者设计理念的影响,所有的widge ... -
【转】Nokia MIDlet(MIDP 2.0)代码签名证书申请和使用指南
2010-01-07 16:33 1392http://embed.e800.com.cn/articl ... -
SMSLib在tomcat中报NoSuchPortException的问题
2010-01-06 18:32 3153在application的project运行正常,但是 ... -
SMS-Push激活J2ME程序 备忘录
2010-01-05 18:17 1892http://www.cnblogs.com/blues ... -
【转】将自定义 widget 嵌入 Kuix 界面
2009-12-31 08:37 1111http://blog.csdn.net/defonds/ar ...
相关推荐
Ku波段射频收发组件的研制,本文对毫米波收发组件进行研 究,其具有频率高、波长短、波束窄、精度高、抗干扰能 力强和容量大等特点
ASP源码—KU6高清影视爬虫 v2.0.zip
Ku波段卫星通信雨衰计算及分析 外文翻译
S7-200可编程器文件库,可供大家下载参考
ASP实例开发源码—KU6高清影视爬虫asp版 v2.0.zip ASP实例开发源码—KU6高清影视爬虫asp版 v2.0.zip ASP实例开发源码—KU6高清影视爬虫asp版 v2.0.zip
TCL王牌LCD32P08A TSUMV36KU LF机芯 HKC
ku6网视频下载器ku6downsetup 已用 很好用
ku波段高频头电路,介绍KU波段高频头的有关电路及相关设计
ku6视频聊天室源代码,代码完整,服务端和客户端的都有。此资源来源于互联网,只用于研究,不要用于商业,后果自负。
Ku波段微带天线阵的设计 对于卫星KU天线设计是非常不错的资源
Tcl语言讲义稿.dockuy mgkuy mjtty yu
对GMA302KU 英文版Datasheet进行简单而且细致的翻译,对于模式设置和中断设置有更加详细的介绍和讲解。
实现基于qt的中文拼音输入法 设计了软键盘以及功能窗口 输入方式切换以及取字
基于FMC+的KU115KU085高性能PCIe载板
Ku频段卫通系统雨衰模型及工程应用,侯景华,权春娟,ku频段卫星通信中,雨衰将会严重影响信号的传输质量。在阐述雨衰机理的基础上,采用ITU-R建议和相关研究成果,分析降雨对通信造成��
CardFive7.7中文制卡软件Zenius_userguide_KU20CNS中文说明书
获取网页的源代码,给一个需要获取网页的路径,然后返回网页的源代码
Discuz!内核精仿9KU喊麦K歌音乐网 带音乐商城+排行榜+交流论坛源码模板
此次更新变化不大,主要是修复了一些出站链接,这些错误基本都是由目标站更新导致。 老用户请覆盖search.asp 和 index.asp ...演示地址:http://www.bai00.com/movie/ku6 此次更新时间 2010/6/11
用matlab解决数独游戏,压缩包中的data文本是我预先选择的一个数独,可以自行修改,待填数字用0代替。最终的解数独文件是sudoku.m