你怎么用Blackberry的RichTextField包装

时间:2010-04-26 20:41:32

标签: blackberry richtextbox word wrapping

我一直在尝试修改富文本字段,以便在其水平字段的一半中正确显示。 目标是:

---------------------------
| address is | ***********|
| very long  | ** IMAGE **|
| state, zip | ***********|
---------------------------

其中地址是与city和zip分开的单个字符串。 我正在修改地址字段:

RichTextField addrField = new RichTextField(address) {
    public int getPreferredWidth() { 
     return 200; 
    }

    protected void layout(int maxWidth,int maxHeight) {
     super.layout(getPreferredWidth(),maxHeight);
     setExtent(getPreferredWidth(), getHeight());
    }
};

结果如下:

-----------------------------
| address is ve| ***********|
| state, zip   | ** IMAGE **|
|              | ***********|
-----------------------------

显然地址正好在图像下面。两个水平场都是200像素宽的静态。这不像系统不知道在哪里包装地址。 但是,我听说要做到这一点并不容易,也不会自动完成。

我没有成功在线找到直接答案。我发现有人说你需要在自定义布局管理器中执行它,有些引用RichTextField API,这是没用的。但实际上并没有人提到如何去做。

据我所知,我可能需要逐个字符地阅读并设置换行的位置。我不知道的是如何做到这一点。你不能只计算字符并假设每个字符值5像素,你不应该这样做。 当然,必须有某种方式以一种有意义的方式实现这一目标。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我没有针对您的问题的确切解决方案,但在测量文字宽度方面,如果您对字段中使用的字体引用了Font对象,则可以调用Font.getAdvance()以像素为单位获取指定文本的宽度。如果您必须在文本中插入手动中断,这可能会有所帮助。