Anko布局设置topMargin遇unresolved reference: lparams错误如何解决?
解决Anko布局lparams未解析问题,正确设置顶部边距
我来帮你搞定这个问题!你碰到的unresolved reference: lparams错误,核心原因是Anko的布局参数写法和你当前的链式调用不匹配,而且大概率是没用到正确的扩展函数或参数传递方式。
先确认必要的导入
首先确保你已经导入了Anko核心布局扩展包,不然很多布局相关函数都会找不到:
import org.jetbrains.anko.* import org.jetbrains.anko.sdk27.coroutines.* // 替换成你项目对应的SDK版本包,比如sdk30等
正确设置顶部边距的两种写法
写法一:布局内部嵌入lparams块(推荐)
这是Anko官方更推荐的写法,把布局参数定义在布局内部的lparams lambda里:
verticalLayout { background = resources.getDrawable(R.color.white) textView("Headline") textView("App text...") // 在这里设置布局参数 lparams { topMargin = dip(100) // 用dip()处理屏幕适配,将dp转成对应像素 } }
写法二:链式调用时搭配lparams块
如果你习惯用链式调用,也可以把lparams块放在布局实例后面,但要注意如果需要指定宽高,要先传宽高参数:
verticalLayout { background = resources.getDrawable(R.color.white) textView("Headline") textView("App text...") }.lparams(matchParent, matchParent) { // 先指定宽高为matchParent topMargin = dip(100) }
为什么你的原代码报错?
你原来写的.lparams(topMargin = 100)是错误写法,因为Anko的lparams扩展函数没有直接接收topMargin作为参数的重载版本。它要么是接收宽高参数+lambda块,要么是直接用lambda块设置所有布局属性,所以编译器找不到对应的方法,就抛出了未解析引用的错误。
另外提醒下:用dip(100)比直接写100更好,因为dip()会自动把dp值转换成适配不同屏幕密度的像素值,保证在各种设备上的边距大小一致,直接写100会被当作原始像素,在高分辨率屏幕上会显得很窄。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

