我试图LabelField
在其布局期间(在 layout() 方法内)设置一些文本,具体取决于显示器的方向,方法如下:
LabelField roomDescLabel = new LabelField("", Field.FIELD_VCENTER) {
protected void layout(int width, int height) {
if (Display.ORIENTATION_LANDSCAPE == orientation) {
setText("LANDSCAPE");
} else {
setText("NOT LANDSCAPE");
}
super.layout(width, height);
}
};
有时,我会在布局消息期间捕获一个IllegalStateException
with Layout 请求。该消息是有道理的,因为这正是我正在做的(我正在调用setText()
它反过来请求布局更新)。是否有任何可接受的方法来根据显示器的方向设置文本值?
我已经找到了解决这个问题的方法,但我对此并不完全满意。解决方案是覆盖LabelField
管理器的sublayout()
方法,并将现有标签字段替换为具有更新文本的新标签字段(并且仅调用 to super.sublayout()
)。令人惊讶的是,此解决方法按预期工作,并且不会触发布局更新。
更新invokeLater()
:另一种可能的解决方案setText()
是调用. 与我之前提出的解决方案相比,这种方法的缺点是和方法将被调用两次。layout()
LabelField
sublayout()
paint()