1

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

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

其中地址是与城市和 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 个像素,而且您不应该这样做。当然,必须有某种方法以一种有意义的方式实现这一目标。

有什么建议么?

4

1 回答 1

0

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

于 2010-04-26T22:27:16.620 回答