我试图在布局期间(在layout()方法内)设置一些LabelField
文本,具体取决于显示的方向,如下所示:
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
。这条消息很有意义,因为这正是我正在做的事情(我正在调用setText()
,而LabelField
又要求布局更新)。是否有任何可接受的方式根据显示器的方向设置文本值?
我找到了解决这个问题的方法,但我并不完全满意。解决方案是覆盖sublayout()
经理的super.sublayout()
方法,并将现有标签字段替换为具有更新文本的新标签字段(并且仅调用invokeLater()
)。令人惊讶的是,此解决方法按预期工作,并未触发布局更新。
更新:
另一种可能的解决方案是使用setText()
layout()
方法中的LabelField
操作调用sublayout()
。与我之前提出的解决方案相比,此方法的缺点是paint()
和{{1}}方法将被调用两次。