View 的工作原理 -- 重读《Android 开发艺术探索》

165 阅读1分钟

重读《Android 开发艺术探索》,本篇是书中的第四章内容的总结。

本章内容的思维导图

image.png

相关代码

Activity 启动后就获取布局中某个 View 的宽高

// 方法 1
override fun onWindowFocusChanged(hasFocus: Boolean) {
    super.onWindowFocusChanged(hasFocus)
    if (hasFocus) {
        val w = mView?.measuredWidth
        val h = mView?.measuredHeight
    }
}

// 方法 2
override fun onStart() {
    super.onStart()
    mView?.post {
        val w = mView?.measuredWidth
        val h = mView?.measuredHeight
    }
}

// 方法 3
override fun onStart() {
    super.onStart()
    mView?.viewTreeObserver?.let { observer ->
        observer.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener{
            override fun onGlobalLayout() {
                mView?.viewTreeObserver?.removeOnGlobalLayoutListener(this)
                val w = mView?.measuredWidth
                val h = mView?.measuredHeight
            }
        })
    }
}