V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Michelangelono
V2EX  ›  Android

anko dsl 语法的一点疑问

  •  
  •   Michelangelono · 2020-06-30 23:54:33 +08:00 · 9756 次点击
    这是一个创建于 1633 天前的主题,其中的信息可能已经有所发展或是发生改变。

    2020-06-30 23 51 38.png

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

    20 条回复    2020-07-04 13:52:20 +08:00
    anthonyeef
        1
    anthonyeef  
       2020-06-30 23:59:06 +08:00
    这里 IDE 提示 RelativeLayout.LayoutParams 不是在说 `这个参数是给谁`

    而是在表明:this 的属性 是什么
    Michelangelono
        2
    Michelangelono  
    OP
       2020-07-01 00:01:35 +08:00
    @anthonyeef 关键是我给 linearLayout 设置的参数,实际效果成了给上一层级的 relativeLayout
    sunbreak
        3
    sunbreak  
       2020-07-01 07:42:38 +08:00
    @Michelangelono 这就是 Anko 的原本设计,linearLayout {}.lparams 是设置 linearLayout 自己的在父布局的 layout
    7hens
        4
    7hens  
       2020-07-01 09:03:33 +08:00 via Android
    anko 官方已经弃坑了,建议不要使用。
    Michelangelono
        5
    Michelangelono  
    OP
       2020-07-01 09:16:02 +08:00
    @sunbreak 关键是上面的 textview 又是对的,那正确的写法是?
    Michelangelono
        6
    Michelangelono  
    OP
       2020-07-01 09:16:14 +08:00
    @7hens 怎么看出来官方放弃了?
    Michelangelono
        7
    Michelangelono  
    OP
       2020-07-01 09:22:29 +08:00
    解决了,应该这样写:
    linearLayout {
    backgroundColor = context.color(R.color.color666)
    }.lparams {
    width = matchParent
    height = dip(1)
    alignParentBottom()
    }
    sunbreak
        8
    sunbreak  
       2020-07-01 09:44:05 +08:00
    @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
        9
    Michelangelono  
    OP
       2020-07-01 09:58:13 +08:00
    @sunbreak Android Jetpact Compose 好像还不错,我试下
    gz911122
        10
    gz911122  
       2020-07-01 10:13:30 +08:00
    anko 官方放弃了.
    建议改用 Android Jetpact Compose
    vanillaxxx
        11
    vanillaxxx  
       2020-07-01 10:15:52 +08:00 via iPhone
    我记得去年就弃了
    loshine1992
        12
    loshine1992  
       2020-07-01 10:29:43 +08:00
    上面都是写 Android 的么?

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

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

    看看是不是 LinearLayout.LayoutParams
    blackbond
        13
    blackbond  
       2020-07-01 10:36:33 +08:00
    @loshine1992 正解
    winterbells
        14
    winterbells  
       2020-07-01 12:08:36 +08:00 via Android
    Jetpack compose 目前也比较迷

    想学来着,结果新项目创建都编译不过。。。
    等 beta 出来了再说 qaq
    Michelangelono
        15
    Michelangelono  
    OP
       2020-07-01 13:08:00 +08:00
    @winterbells 那我还是不搞这个了……想抛弃 xml 真的太难了
    winterbells
        16
    winterbells  
       2020-07-01 16:02:53 +08:00 via Android
    @Michelangelono
    刚才试了一下官方的 JetNews demo,可以运行了

    ---

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

    这应该是种趋势吧,等 JC 正式版出来应该会切换
    Michelangelono
        17
    Michelangelono  
    OP
       2020-07-01 17:30:51 +08:00 via Android
    @winterbells 效率的增加有肉眼可见的区别吗?
    winterbells
        18
    winterbells  
       2020-07-01 17:49:34 +08:00 via Android
    @Michelangelono 说是为了保证 90 帧及以上也流畅
    fansangg
        19
    fansangg  
       2020-07-04 01:31:40 +08:00
    @Michelangelono 怎么装逼怎么来
    yaocai321
        20
    yaocai321  
       2020-07-04 13:52:20 +08:00
    LinearLayout 是 RelativeLayout 的子 view,所以他的 LayoutParams 是 RelatvieLayout.LayoutParams 有什么问题吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5290 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 03:41 · PVG 11:41 · LAX 19:41 · JFK 22:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.