显然,com.codename1.ui.plaf.LookAndFeel.getTextAreaSize(TextArea, boolean)
不能返回确切的文本大小。
我想确定气泡的大小,或气泡中可能多行文本的大小。
我该怎么做?在CN1的某个地方有实用程序吗?
答案 0 :(得分:0)
这将返回首选大小。对于多行文本,由于文本是可修改和可滚动的,因此我们基于行/列的大小进行调整,因此在此计算中并未完全考虑其内容。即使考虑到这一点,也不可能是100%准确的,因为即使1个像素的宽度差异也可能导致换行,从而使所有内容重排。文本大小调整涉及很多特殊情况,因此您不应该依赖准确性。尝试使用setActAsLabel
或SpanLabel
。
答案 1 :(得分:0)
显然,“代号1”中目前没有可用于调整其内容大小的文本区域组件。
这是一个自定义工具,可以执行此操作:
private class Hint extends Component {
final String text;
final int rowsGap = new TextArea().getRowsGap();
private Hint(String aText) {
text = aText;
}
@Override
protected Dimension calcPreferredSize() {
int prefW = 0;
int prefH = 0;
Style style = getStyle();
Font font = style.getFont();
List<String> lines = StringUtil.tokenize(text, "\n");
int tally = 0;
for (String line: lines) {
tally++;
prefW = font.stringWidth(line);
}
prefH = tally * (font.getHeight() + rowsGap);
prefW += getUnselectedStyle().getHorizontalPadding() + 5;
prefH += style.getPaddingTop() + style.getPaddingBottom();
if(style.getBorder() != null) {
prefW = Math.max(style.getBorder().getMinimumWidth(), prefW);
prefH = Math.max(style.getBorder().getMinimumHeight(), prefH);
}
if(getUIManager().getLookAndFeel().isBackgroundImageDetermineSize() && style.getBgImage() != null) {
prefW = Math.max(style.getBgImage().getWidth(), prefW);
prefH = Math.max(style.getBgImage().getHeight(), prefH);
}
return new Dimension(prefW, prefH);
}
@Override
public void paint(Graphics aGraphics) {
Style style = getStyle();
int xLeft = style.getPaddingLeft(false), yTop = style.getPaddingTop();
List<String> lines = StringUtil.tokenize(text, "\n");
int y = yTop;
aGraphics.setColor(0x000000);
for (String line: lines) {
aGraphics.drawString(line, getX() + xLeft, getY() + y);
y += style.getFont().getHeight() + rowsGap;
}
}
}