android - Kotlin:未调用 onGlobalLayout

标签 android android-view kotlin

我正在使用 Kotlin,并使用 onGlobalLayout 加载 ImageView 。通过 loadUrl。在不使用 afterMeasured 的情况下,我的图像加载得很好,但有时由于高度为 0,它会崩溃。所以我正在考虑使用我在扩展函数 afterMeasured 中定义的 onGlobalLayout,如下所示。然而,不知何故 onGlobalLayout 根本不会被调用。我的代码可能有什么问题?

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_ministry)
    actionBar?.setDisplayHomeAsUpEnabled(true)
    model = intent.getSerializableExtra(Constants.ACTIVITY_NAVIGATE_MINISTRY) as Model.Ministries
    actMinistryImage.loadUrl(model.photo)
}

fun ImageView.loadUrl(url: String?, placeholder: Int = R.drawable.ministries_blank) {
    this.afterMeasured {
        val transformation = FixRatioTransformation(this, true)
        Picasso.with(context).load(url).error(placeholder).transform(transformation)
                .placeholder(placeholder).into(this)
    }
}


inline fun <T: View> T.afterMeasured(crossinline f: T.() -> Unit) {
    viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
        override fun onGlobalLayout() {
            if (measuredWidth > 0 && measuredHeight > 0) {
                viewTreeObserver.removeOnGlobalLayoutListener(this)
                f()
            }
        }
    })
}

也许这不是 Kotlin 特有的,但更多的是我这边调用 onGlobalLayout 的方式不正确?

最佳答案

首先,您应该比较 widthheight 而不是 measuredWidthmeasuredHeight。后一种尺寸仅在测量/布局过程中使用。

其次,您应该确保 ImageView 在布局中得到正确描述。即它的layout_widthlayout_height不能是wrap_content。此外,其他 View 不得导致此 ImageView 的大小为 0

关于android - Kotlin:未调用 onGlobalLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36526371/

相关文章:

java - 如何在 Android 应用程序中创建自定义 View ?

Android - ImageLoader 不会从 URL 重新检索图像

java - 如何捕获 Firebase Auth 特定异常

android - 改变 RadioButton 的背景覆盖单选按钮 android 上的文本

android - fragment 中没有自定义 View 的自定义 XML 属性

android - 数据绑定(bind) - 必须首先将 Lambda 表达式解析为其 setter 以获取类型

android - 如何正确安装 admob,在某些测试手机上不显示

android - 在 ApplicationContext 中存储对象

android - Dagger2 不生成 Dagger 类

Android:抽象自定义 View 和常见布局膨胀