如何在 Kotlin 中创建视图扩展函数
How to create a View extension function in Kotlin
我正在尝试在 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)
这就是我定义扩展函数的方式
private fun View?.setNewWidth(i: Int) {
val layoutParams: ViewGroup.LayoutParams = View.layoutParams
layoutParams.width = i
View.layoutParams = layoutParams
}
我不明白我需要在这里做什么。
我想将扩展函数调用为myView.ExtensionFunction()
,但我不知道该怎么做。这些教程没有提供任何信息。
好的,所以我的问题是我不知道如何获取对调用视图的引用。即,我不知道如何调用 myView
并在扩展函数 setNewWidth()
中设置它的 属性
所以,我尝试使用 this?
并且成功了。
然后,我对 myView
的扩展函数做了一些更改,它是 Relative Layout
.
这是我的计算结果:
private fun RelativeLayout?.setWidth(i: Int) {
val layoutParams: ViewGroup.LayoutParams? = this?.layoutParams
layoutParams?.width = i
this?.layoutParams = layoutParams
}
我认为这里的主要问题是如何定义扩展函数,特别是具有 View.layoutParams
的行 - 这是在 View
上调用静态 属性 '存在。您需要使用实例中的那个。如果您像这样编写扩展函数:
private fun View?.setNewWidth(i: Int) {
val layoutParams = this?.layoutParams
layoutParams?.width = i
this?.layoutParams = layoutParams
}
然后你就可以随意调用方法了。就我个人而言,我觉得这不是那么可读,我会在这里删除可空性并将其写为:
private fun View.setNewWidth(i: Int) {
val newLayoutParams = layoutParams
newLayoutParams?.width = i
layoutParams = newLayoutParams
}
唯一的区别是现在您需要 ?.
在视图可以为 null 的情况下调用该方法,我个人认为这很好 - myView?.setNewWidth(123)
。我假设大多数时候您不会有可为 null 的视图。
我正在尝试在 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)
这就是我定义扩展函数的方式
private fun View?.setNewWidth(i: Int) {
val layoutParams: ViewGroup.LayoutParams = View.layoutParams
layoutParams.width = i
View.layoutParams = layoutParams
}
我不明白我需要在这里做什么。
我想将扩展函数调用为myView.ExtensionFunction()
,但我不知道该怎么做。这些教程没有提供任何信息。
好的,所以我的问题是我不知道如何获取对调用视图的引用。即,我不知道如何调用 myView
并在扩展函数 setNewWidth()
所以,我尝试使用 this?
并且成功了。
然后,我对 myView
的扩展函数做了一些更改,它是 Relative Layout
.
这是我的计算结果:
private fun RelativeLayout?.setWidth(i: Int) {
val layoutParams: ViewGroup.LayoutParams? = this?.layoutParams
layoutParams?.width = i
this?.layoutParams = layoutParams
}
我认为这里的主要问题是如何定义扩展函数,特别是具有 View.layoutParams
的行 - 这是在 View
上调用静态 属性 '存在。您需要使用实例中的那个。如果您像这样编写扩展函数:
private fun View?.setNewWidth(i: Int) {
val layoutParams = this?.layoutParams
layoutParams?.width = i
this?.layoutParams = layoutParams
}
然后你就可以随意调用方法了。就我个人而言,我觉得这不是那么可读,我会在这里删除可空性并将其写为:
private fun View.setNewWidth(i: Int) {
val newLayoutParams = layoutParams
newLayoutParams?.width = i
layoutParams = newLayoutParams
}
唯一的区别是现在您需要 ?.
在视图可以为 null 的情况下调用该方法,我个人认为这很好 - myView?.setNewWidth(123)
。我假设大多数时候您不会有可为 null 的视图。