如何在Kotlin中正确实现并调用View的setNewWidth扩展函数?
解决Kotlin中View扩展函数setNewWidth的实现问题
我来帮你搞定这个扩展函数的问题!你的思路是对的,但代码里有几个关键错误导致它没法正常工作,咱们一步步来修正:
你的代码问题所在
你错误地使用了View.layoutParams——这是试图访问View类的静态属性,但实际上layoutParams是View实例的属性,必须通过当前调用函数的View对象(也就是this)来访问。另外你也没妥善处理View?的空安全问题。
正确的扩展函数实现
把你的扩展函数改成这样:
fun View?.setNewWidth(newWidth: Int) { this?.let { view -> // 获取当前View的布局参数,如果为空直接返回(比如View还没添加到父布局) val layoutParams = view.layoutParams ?: return // 修改宽度 layoutParams.width = newWidth // 重新设置布局参数,触发系统更新View尺寸 view.layoutParams = layoutParams } }
代码解释
- 用
this?.let来处理空安全:如果调用函数的View是null,整个代码块不会执行,避免空指针异常 - 通过
view.layoutParams获取当前实例的布局参数,而不是类的属性 - 修改宽度后必须重新赋值给view.layoutParams,这一步是关键——只有这样Android系统才会感知到布局参数变化,重新计算并更新View的尺寸
你的调用方式完全正确
你在Fragment里的调用代码没问题,保持原样就行:
// 在Fragment中找到my_view val myView = v.findViewById<RelativeLayout>(R.id.my_view) // 调用扩展函数 myView.setNewWidth(500)
额外小建议
如果你用的是AndroidX,建议换成ViewBinding来替代findViewById,代码会更简洁安全,但这不是必须的,不影响你这个扩展函数的使用。
内容的提问来源于stack exchange,提问作者SowingFiber
相关产品推荐
相关产品推荐

