4

我正在动态创建一个板,由在相对布局中动态设置的视图组成。在我的 onCreate 中,我调用了创建所有内容的 Board 类的构造函数:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);
    RelativeLayout boardLayout = (RelativeLayout) findViewById(R.id.layoutBoard);
    board = new Board(this, boardLayout);

}

在我的 Board 类中,我设置了层的规则,我还需要设置我显示的视图的大小,我从和的值开始计算boardLayout.getWidth()它们boardLayout.getHeight()

现在的问题是,所有在屏幕上的实际绘制都是在onCreate方法结束之后才进行的,所以在创建的那一刻,图层的宽高都为零。

所以我决定使用以下方法设置大小:

    boardLayout.addOnLayoutChangeListener(new RelativeLayout.OnLayoutChangeListener() {
        @Override
        public void onLayoutChange(View v, int left, int top, int right,
                int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                board.setParentLayoutSize(left, top, right, bottom);
        }
    });

不幸的是,这种方法仅适用于 API 11,我必须坚持使用 API 10。我怎么能做到这一点?有没有办法在不使用这种方法的情况下监听布局变化?

谢谢!

4

2 回答 2

4

最优雅的解决方案是扩展 RelativeLayout 类,然后您可以覆盖 onSizeChanged:

protected void onSizeChanged (int w, int h, int oldw, int oldh)

如果您需要知道充气后的尺寸,您可以尝试手动测量视图:因此调用 measure(...) 而不是 layout(...) 然后 getMeasuredWidth()/getMeasuredHeight 应该返回正确的尺寸。但这更棘手,如果您不确定它是如何工作的,请不要使用它。

于 2013-01-18T12:38:08.243 回答
1

在我找不到任何东西的几个小时后,我写了这条消息并立即发现: 如何检索视图的尺寸?

于 2013-01-18T11:48:46.207 回答