簡體   English   中英

如何在 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() ,但我不知道該怎么做。 這些教程沒有信息量。

我認為這里的主要問題是擴展函數是如何定義的,特別是具有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
}

唯一的區別是現在您需要?. 如果視圖可以為空,則調用該方法,我個人認為這很好 - myView?.setNewWidth(123) 我假設大多數時候你不會有一個可為空的視圖。

好的,所以我的問題是我不知道如何引用調用視圖。 即,我不知道如何調用myView並在擴展函數setNewWidth()設置其屬性

所以,我試過用this? 它奏效了。

然后,我對擴展函數做了一些更改,以便為Relative Layout myView工作。

這是我的工作:

private fun RelativeLayout?.setWidth(i: Int) {
    val layoutParams: ViewGroup.LayoutParams? = this?.layoutParams
    layoutParams?.width = i
    this?.layoutParams = layoutParams
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM