【LGame学堂013.控件篇】简单控件之LMessage
关键字:LGame 入门 控件 LMessage
笨木头花心贡献,啥?花心?不呢,是用心~
转载请注明,原文地址:http://blog.csdn.net/musicvs/article/details/7559567
LMessage本来是挺容易使用的一个控件,可为什么我这么迟才介绍呢?
糟糕,有点不好意思说了,因为有某个地方卡住我了,研究一番才解决了~
好啦,开始分享~
-
LMessage就是文本框,RGB游戏最常见的那种,而且还可以逐字打印呢~
文本框嘛,当然可以有个框啦,可以是纯颜色的框,也可以是用一张图片做背景框,任君选择。噢~当然,你不喜欢框也可以不要~
-
LMessage的创建和其它控件没有什么区别,直接上代码哈:
@Override public void onLoad() { /* 创建一个宽高分别为120、180的消息框 */ msg = new LMessage(120, 180); /* 设置消息框的背景,也可以用图片做背景 */ msg.setBackground(LColor.cyan); /* 设置消息框的坐标 */ msg.setLocation(100, 50); /* 添加消息框到desktop */ add(msg); /* 关键操作,设置每行最多显示的文字个数, * 如果没有这个设置,你会有意想不到的发现(大家自己试试哈) */ msg.setMessageLength(4); /* 设置文本,要设长一点,不然就看不到setMessageLength的效果咯~ */ msg.setMessage("糟糕~笨木头~"); }
有2点需要注意的:
1. LMessage是有宽高的,超出这个范围的字不会显示出来。
2. 注意你的文本框的宽高~!要设置每行最多显示的字数。
-
我就是卡在第2点上的,我之前没有设置每行最多显示的字数,当一行显示不完的时候,就会出现一个奇怪的问题。
什么问题呢?按正常的思维方式,一行显示不完而且又没有设置换行,那就是后面有几个字不显示咯。
-
可实际上呢,它是前面的几个字不显示...把msg.setMessageLength(4);注释掉,运行看看:
糟了个糕的~因为这个情况超出了我的思维方式,所以我以为我哪里操作有误,完全没有想到是因为一行显示不完导致的。
而且,你们知道我多糟糕吗?我设置的文本比较短,所以更难发现这个问题...前面几个字总是不见了,本来应该显示糟糕~笨木头~。
-
于是我就去研究一下源码了..研究结果如下。
原来呢,LMessage默认一行最多显示10个字,这也没什么关系。最主要的是这个数字会影响换行的算法,换行的算法会改变绘制文字的初始X坐标。
比如每行限制显示10个字的时候,绘制文字初始坐标假设为-80;然后,如果是每行限制显示20个字的时候,绘制文字的初始坐标可能就为-140(假设的值)。
也就是说,每行限制显示的字数的值越大,每行绘制文字的初始坐标就会越靠左,而且会成为负值。
-
这个嘛,我个人理解是”Bug”了(因为它确实困扰了我..),不过影响不大,只要注意两点就好:
1. 文本框的宽是否大于等于每行限制显示的字数的宽,比如一行5个字,每个字宽20,那么一行的字最多就会有100的宽度,必须保证文本框的宽不小于这个值。
2. 要注意,LMessage默认每行显示10个字,也就是说,如果你不设置每行限制的字数,那么每行的字最多就会有10 * 20 = 200的宽度(假设一个字宽20),那就必须保证文本框的宽不小于200。
-
最后呢,试试设置每行的最大字数之后的效果:msg.setMessageLength(4);
好啦~啰嗦完毕~
谢谢你们听我唠叨,下次见。
-
源码下载:http://download.csdn.net/detail/musicvs/4295891
原文第一次发布于Android-fans论坛: