Android ViewTreeObserver.OnGlobalLayoutListener的麻烦

Mik*_*mov 1 android view

我正在使用ViewTreeObserver.OnGlobalLayoutListenerin onCreate()方法来获取布局的宽度。它很好用,但是当我在onGlobalLayout()回调更改中使用变量时,请不要将其保留在外部。

例如,当我在“活动”字段中保存布局的宽度时,它会在onGlobalLayout()方法外返回上一个值或默认情况下的值(在我的情况下为0)。当我更改变量的引用时,方法外它们将为null。

layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
    width = layout.getWidth(); // width - activity's field
    Log.d("myLogs", width); //return rigth value
}
});
Log.d("myLogs", width); //return 0
Run Code Online (Sandbox Code Playgroud)

我不知道如何处理,也许我需要Layout以另一种方式获得宽度。

提前致谢)

bus*_*lee 6

OnGlobalLayoutListener继续进行ViewTreeObserver,仅此onGlobalLayout而已,方法不会立即调用,它将在发生此布局的布局事件时被调用。因此,addOnGlobalLayoutListener立即使用方法,您不会收到未更改的width变量值。