【LGame入门学堂013.控件篇】简单控件之LMessage

笨木头  2012-05-12 8:56   LGame   阅读(3,378)   3条评论

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论坛:

http://www.android-fans.net/thread-1717-1-1.html

3 评论

  1. 楼主很勤劳~
    我发现一个调整显示文字的方式,就是设置字号,如:
    msg.setMessageFont(LFont.getFont(10));

    诚然,有时候字号必须在不同面保持一致。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注