View尺寸何时可用于MainActivity?

时间:2018-09-22 08:14:21

标签: android user-interface layout view dimensions

假设我们有一个main_activity.xml布局,该布局以相对方式定义所有维度-约束,百分比和准则(即百分比)...没有“静态” dp。

但是在MainActivity.java中,我们以编程方式创建了一些子视图,并且我们希望相对于现有视图定义它们的高度/宽度尺寸。

我们不知道设备的尺寸或密度,因此也不知道运行时之前任何视图的(实际整数)尺寸...

但是我们可以这样说:

int heightDimensionForNewView = (int) (someAlreadyInflatedView.getHeight() / 7f)

但是如果在某些情况下需要在应用启动时立即显示这些“新”视图怎么办?

所以,这个问题:

在Android Activity生命周期中,什么时候可以(以某种方式)安全地查询(某种方式)实际/最终/保证的布局尺寸的最早时间是什么时候?那是什么东西,又是什么?

我无法找到诸如“ onContentViewInflated()”之类的替代方法,并且没有像Fragments中那样的onCreateView()方法。

我还尝试了从onStart()和onResume()内部进行记录,但是维度结果始终为“ 0”,大概是因为它们还没有被夸大。

我知道任何给定的View都可以在onMeasure()中获得其自己的尺寸,但是您将在MainActivity中创建一个静态变量,以便对其进行分配并从那里使用它...或者通过某种方式发送该信息从“视图”返回到“活动”。

我想念什么?我只是想能够以某种方式从MainActivity内部获取该数字。

1 个答案:

答案 0 :(得分:1)

我的建议是:

@Override
public void onResume() {
    super.onResume();
    getActivity().setOnToggledlistener(this); //register callback
}

view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
    @Override
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
        int oldWidth = oldRight - oldLeft; // right exclusive, left inclusive
        if( v.getWidth() != oldWidth ) {
            // width has changed
        }
    }
});