如何在 Kotlin 中创建视图扩展函数

Sow*_*ber 1 extension-methods android android-view kotlin kotlin-extension

我正在尝试在 Kotlin 中创建一个扩展函数。我确实尝试了几个教程,但不太明白如何实现这个教程。

我正在尝试创建一个setWidth()这样的函数

//Find my_view in the fragment
val myView = v.findViewById<RelativeLayout>(R.id.my_view)

//Then use the extension function
myView.setNewWidth(500)

Run Code Online (Sandbox Code Playgroud)

这就是我定义扩展函数的方式


private fun View?.setNewWidth(i: Int) {
    val layoutParams: ViewGroup.LayoutParams = View.layoutParams
    layoutParams.width = i
    View.layoutParams = layoutParams
}

Run Code Online (Sandbox Code Playgroud)

我不明白我需要在这里做什么。

我想将扩展函数称为myView.ExtensionFunction(),但我不知道该怎么做。教程内容不详。

Fre*_*red 5

我认为这里的主要问题是如何定义扩展函数,特别是具有的行- 这是调用不存在的View.layoutParams静态属性。View您需要使用实例中的一个。如果您像这样编写扩展函数:

private fun View?.setNewWidth(i: Int) {
  val layoutParams = this?.layoutParams
  layoutParams?.width = i
  this?.layoutParams = layoutParams
}
Run Code Online (Sandbox Code Playgroud)

然后你就可以调用你想要的方法了。就我个人而言,我觉得这不太可读,我会删除这里的可空性并将其写为:

private fun View.setNewWidth(i: Int) {
  val newLayoutParams = layoutParams
  newLayoutParams?.width = i
  layoutParams = newLayoutParams
}
Run Code Online (Sandbox Code Playgroud)

唯一的区别是,现在您需要?.在视图可为空时调用该方法,我个人认为这很好 - myView?.setNewWidth(123)。我假设大多数时候您不会有可为空的视图。