【问题标题】:When does android first do layout?android什么时候第一次做布局?
【发布时间】:2010-01-21 22:02:19
【问题描述】:

我需要根据我的 Activity 中的小部件和视图的初始布局准备一些对象。我想在初始化步骤中进行,最好是 onCreate 和 onStart。考虑到我们不在前台时发生变化的可能性,其中一些可能需要在 onResume 中发生。

所以我检查了我是否可以衡量我的观点是如何布局的。

Log.d("MyApp", "w,h of X is " + findViewById(R.id.X).getWidth() +
      "," + findViewById(R.id.X).getHeight());

我在 onCreate、onStart 和 onResume 中运行了这个。每次我得到 0,0 的宽度,高度。如果我等待 onTouchEvent 我得到布局信息,那么到那时布局就完成了。

我很惊讶在我看到 onResume 时布局还没有设置和最终确定。我希望到那时这些小部件已经布置好并可以摆弄了。

【问题讨论】:

    标签: android layout


    【解决方案1】:

    布局由视图层次结构根据需要完成。

    当您的应用程序启动时,这将在onResume() 之后的一段时间(因为您的窗口正在被调出并放置在屏幕上)。

    了解布局操作的正确方法是通过各种视图层次回调——View.onSizeChanged() 等,如“布局”here 下所述:

    【讨论】:

    • 我对 onSizeChanged 方法进行了堆栈跟踪,它确实来自消息调度循环。
    • 似乎没有办法在没有子类化的情况下设置“onSizeChanged”处理程序,这是不幸的,因为某些布局没有构造函数。你最终不得不为应该是微不足道的事情做很多工作。
    • @dpk 你可以使用 ViewTreeObserver 设置一堆与绘图和布局相关的回调,从而避免对视图进行子类化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2011-05-23
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多