anko dsl 语法的一点疑问

2020 年 6 月 30 日
 Michelangelono

按照道理下面这个 linearLayout 的 lparams{} 设置的参数不应该是给 linearLayout,但 as 提示的是上一个层级的 relativeLayout,实际设置的效果也是给 relativeLayout 。

13775 次点击
所在节点    Android
20 条回复
anthonyeef
2020 年 6 月 30 日
这里 IDE 提示 RelativeLayout.LayoutParams 不是在说 `这个参数是给谁`

而是在表明:this 的属性 是什么
Michelangelono
2020 年 7 月 1 日
@anthonyeef 关键是我给 linearLayout 设置的参数,实际效果成了给上一层级的 relativeLayout
sunbreak
2020 年 7 月 1 日
@Michelangelono 这就是 Anko 的原本设计,linearLayout {}.lparams 是设置 linearLayout 自己的在父布局的 layout
7hens
2020 年 7 月 1 日
anko 官方已经弃坑了,建议不要使用。
Michelangelono
2020 年 7 月 1 日
@sunbreak 关键是上面的 textview 又是对的,那正确的写法是?
Michelangelono
2020 年 7 月 1 日
@7hens 怎么看出来官方放弃了?
Michelangelono
2020 年 7 月 1 日
解决了,应该这样写:
linearLayout {
backgroundColor = context.color(R.color.color666)
}.lparams {
width = matchParent
height = dip(1)
alignParentBottom()
}
sunbreak
2020 年 7 月 1 日
@Michelangelono https://github.com/Kotlin/anko,README.md 第一句“Anko is deprecated. Please see this page for more information.”

建议看看 Android Jetpact Compose 或者 Flutter 吧,也是 DSL 声明式 UI 框架
Michelangelono
2020 年 7 月 1 日
@sunbreak Android Jetpact Compose 好像还不错,我试下
gz911122
2020 年 7 月 1 日
anko 官方放弃了.
建议改用 Android Jetpact Compose
PEPEXXX
2020 年 7 月 1 日
我记得去年就弃了
loshine1992
2020 年 7 月 1 日
上面都是写 Android 的么?

你的 LinearLayout 是 RelativeLayout 的子 View,它的 LayoutParams 是它在 RelativeLayout 里怎么放, 所以是 RelativeLayout.LayoutParams

不信你在 LinearLayout 里面再放一个 TextView 设置 LayoutParams

看看是不是 LinearLayout.LayoutParams
blackbond
2020 年 7 月 1 日
@loshine1992 正解
300
2020 年 7 月 1 日
Jetpack compose 目前也比较迷

想学来着,结果新项目创建都编译不过。。。
等 beta 出来了再说 qaq
Michelangelono
2020 年 7 月 1 日
@winterbells 那我还是不搞这个了……想抛弃 xml 真的太难了
300
2020 年 7 月 1 日
@Michelangelono
刚才试了一下官方的 JetNews demo,可以运行了

---

我们已经抛弃 XML 了,代价是用纯 Kotlin 代码画布局 qaq
不是 ASL 也不是 Compose,就是 TextView(context) 这种写法。。

这应该是种趋势吧,等 JC 正式版出来应该会切换
Michelangelono
2020 年 7 月 1 日
@winterbells 效率的增加有肉眼可见的区别吗?
300
2020 年 7 月 1 日
@Michelangelono 说是为了保证 90 帧及以上也流畅
fansangg
2020 年 7 月 4 日
@Michelangelono 怎么装逼怎么来
ClaudeCode
2020 年 7 月 4 日
LinearLayout 是 RelativeLayout 的子 view,所以他的 LayoutParams 是 RelatvieLayout.LayoutParams 有什么问题吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/686084

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX