原本以为关于TextArea的断行问题已经写得足够多了,而且给出一个大致的解决思路,但是昨天实机测试的是否发现还是有不少问题的,看似一个简单的问题,其实和Kuix的布局机制紧密关联,而布局,看起来是无关紧要,很多简单的应用可能根本用不上,但是应该说是整个Kuix的一个基础基石,所以这里分析一下Kuix的一些基础代码,顺便给出一个进一步的解决方式.
layout有很多种,如果一个widget(泛指基础于widget的所有控件)没有指定布局实际上默认是Inlinelayout,一个子对象占用一行,而不是我原先设想的flowlayout,但是在解析TextArea分词函数的时候,我们看到实际上是把每个word拆分为Text加入内容,所以实际上Textarea就是一个容器,这个也是论坛上某人解释说TextArea和TextField的实现方式不同的原因,它无法做到实时编辑,或者说作者觉得没有必要费劲去实现.实际上TextArea就是flowlayout
private static final Layout TEXTAREA_DEFAULT_LAYOUT = new FlowLayout(Alignment.BOTTOM);
作者采用这个做法其实我费了很大的劲才满满理解,因为windows的编程思路是每个控件都有位置大小的,再根据大小选择需要显示的内容(视口),而java的布局思想更倾向于一种堆积木的方式,所以它做出来的界面总是很死板,不美观,偏题了,实际上J2ME的awt我只是10年前粗略了解了一下,很肤浅.我猜测TextArea采用flowlayyout主要还是基于移动终端的屏幕分辨率差异太大,所以它需要一种可以自动适应的布局,以便在不同的设备上界面不会变形太厉害.让文本域可以自动缩展,由此带来一个问题就是,textarea分词的时候可以不管本身能占用多大的空间,反正我就一个个放text,最后由layout自己决定什么时候换行,设置于调试时你可以发现,分词时textarea的width/height/x/y全部都是0,它连自己的位置都还不知道,根本无法获得宽度并以此进行断行.而且中文有其特殊性,每个字作为一个word的话,几页的文字就会内存溢出了,而如果每行作为一个Text的话理论上就可以多显示10几倍内容,当然,不是所有的应用都有这个需求,这说明我这个人太爱钻牛角尖了.
一开始我的想法是在样式表中增加width属性(Kuix所有的widget是没有width/height属性的,只有minsize,然后根据内容自动扩展),设置width让我回归到很熟悉的css样式表,但是出现其他问题,一个是Kuix.alert等弹出对话框文字也是用textrarea,其大小是根据屏幕大小变化的,我无法为其设置width属性,除非我修改Kuix所有popup对话框,而且这样我必须设置所有文本框的宽度,调试起来很麻烦,还不能适应不同大小的屏幕,这和作者原来的思想背离了.
然后就有了折衷的方法,在显示不多的文字时,按照默认的1汉字1词来分,在需要多行显示时,自动探测其父对象的宽度,计算自身的宽度
1 设置了width,按照设定大小拆分
2 增加fullscreeen属性,设置此属性后自动扩展填满父对象
3 按照1汉字1词拆分.
这里再次给出3的拆词函数,原函数有bug
private void splitWords2(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);
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 = "";
}
}
if(!word.equals("")){
Text textWidget = new Text();
textWidget.setText(word);
if (style != Font.STYLE_PLAIN) {
textWidget.setDefaultFontStyle(style);
}
add(textWidget);
}
}
总结一下我的修改内容:
1 允许弹出编辑内容的窗口
2 styled=true时解析 为空格(原来的解析器不知为何没有做空格的转义),增加对不分不规范标签的处理,如<BR>没有结束标签,标签大小写不匹配,属性值没有用括号括起等
3 style=false时接收回车换行,
4 中文的换行处理,同时改进英文的拆词方式
分享到:
相关推荐
【KUIX中文文档概述】 KUIX,全称为Kalmeo J2ME的用户界面扩展,是一个专门针对Java ME应用程序开发的框架。它的主要目标是简化和加速高端J2ME应用的创建,提供丰富的图形元素,如按钮、文本框、列表和菜单,以构建...
标题中的"kuix.rar"是一个压缩文件,通常用于存储多个相关文件或文件夹,便于传输和存储。RAR是一种流行的压缩格式,由RarLab开发,它提供了更高的压缩比和更全面的错误修复功能。"kuix"、"kutil"和"demo"是这个...
目前广泛应用的J2Me框架,Kuix是一个使用XML/CSS来开发的lib,它提供了大部分UI组件,比 如:button,textfields,lists,menus,tabs等)。它的主页是源代码放在google code上,http://code.google.com/kuix,如果要使用...
Kuix的名字可能来源于"Kuix"在中文中的谐音“快秀”,寓意快速展示和执行J2ME应用的能力。 Kuix框架的主要特点包括: 1. **组件化**:Kuix提供了一系列预定义的UI组件,如按钮、文本框、列表视图等,这些组件经过...
【手机界面kuix-1.1.0】是一款专为移动设备设计的用户界面库,其核心是基于XML和CSS技术构建的。这个库的主要目标是简化开发者在创建应用程序时的UI开发工作,提供了一系列丰富的预定义组件,使得开发者能够快速、...
《kuix-1.1.0源代码解析与应用指南》 在软件开发过程中,遇到导入jar包却找不到类的问题是常有的困扰。为了解决这类问题,我们常常需要深入到源代码层面进行分析和理解。本文将详细介绍kuix-1.1.0的源代码,帮助...
wm6上面运行流畅,鼠标也是稍慢,进入文本控件后自动弹出输入窗口,无法在界面窗口直接输入。按关闭电话键后退出,5800按功能键退出,可以通过通话或者其他按键切换 kuixkeyvalidator.jar 用于检测输入键盘键值的...