【发布时间】:2013-11-04 10:08:09
【问题描述】:
我想在创建活动的图形界面后执行一些任务。我需要知道某些视图的确切高度和宽度,并根据宽度和高度更改其中一些视图的 layoutParams。在onResume 方法中,视图的所有参数仍然等于 0...
至于现在,我正在使用从 onCreate 运行一段时间后运行的延迟任务,但这根本不是一个好的解决方案......
活动创建中最后调用的方法是什么?在这种方法中视图的宽度和高度是否可用?
【问题讨论】:
我想在创建活动的图形界面后执行一些任务。我需要知道某些视图的确切高度和宽度,并根据宽度和高度更改其中一些视图的 layoutParams。在onResume 方法中,视图的所有参数仍然等于 0...
至于现在,我正在使用从 onCreate 运行一段时间后运行的延迟任务,但这根本不是一个好的解决方案......
活动创建中最后调用的方法是什么?在这种方法中视图的宽度和高度是否可用?
【问题讨论】:
在 onCreate() 中调用它
final View rootView = getWindow().getDecorView().getRootView();
rootView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//by now all views will be displayed with correct values
}
});
【讨论】:
onResume() 是最后一个,但也许更好的是 onViewCreated()。它的优点是每次重新获得焦点时都不会调用它。但是尝试在您需要的布局元素上通过 post() 获取视图的属性。例如:
textView.post(new Runnable() {
@Override
public void run() {
// do something with textView
}
});
【讨论】:
活动开始时运行的最后一个方法是onResume()。
你可以在Activity lifecycle找到它。
如果这对您来说还不够好,请从 onResume() 运行延迟任务,您会没事的。
【讨论】:
在 onResume() 方法的最后一行获取你想要的所有数据。它应该向您展示您所需要的一切。
【讨论】: