0

我试图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);
    }
};

有时,我会在布局消息期间捕获一个IllegalStateExceptionwith Layout 请求。该消息是有道理的,因为这正是我正在做的(我正在调用setText()它反过来请求布局更新)。是否有任何可接受的方法来根据显示器的方向设置文本值?

我已经找到了解决这个问题的方法,但我对此并不完全满意。解决方案是覆盖LabelField管理器的sublayout()方法,并将现有标签字段替换为具有更新文本的新标签字段(并且仅调用 to super.sublayout())。令人惊讶的是,此解决方法按预期工作,并且不会触发布局更新。

更新invokeLater():另一种可能的解决方案setText()是调用. 与我之前提出的解决方案相比,这种方法的缺点是和方法将被调用两次。layout()LabelFieldsublayout()paint()

4

0 回答 0