繁体   English   中英

如何在片段内使用Anko DSL?

[英]How to use Anko DSL inside a Fragment?

Github Wiki页面显示了要在Activity实例中使用的示例:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    verticalLayout {
        padding = dip(30)
        editText {
            hint = "Name"
            textSize = 24f
        }
        editText {
            hint = "Password"
            textSize = 24f
        }
        button("Login") {
            textSize = 26f
        }
    }
}

Fragment如何做同样的事情?

我试图将verticalLayout块放在onCreateView但是无法解析该方法。 我添加了anko-support-v4依赖关系,但仍然没有运气。

如果要将UI放在单独的类中,以便可以在其他地方重用,则还可以使用AnkoComponent 0.8使用AnkoComponent

class FragmentUi<T>: AnkoComponent<T> {
    override fun createView(ui: AnkoContext<T>) = with(ui) {
        verticalLayout {
            // ...
        }
    }
}

您可以在片段的onCreateView()调用它,方法是

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View
        = FragmentUi<Fragment>().createView(AnkoContext.create(ctx, this))

在挖掘anko-support-v4源代码以及一些试验和错误之后,尽管不确定是否是正确/推荐的方法,但我找到了一种解决方法。 似乎没有记录。

来自我的Fragment代码的示例:

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {

    return UI {
        verticalLayout {
            linearLayout {
                avatar = imageView().lparams(width = dip(48), height = dip (48))
                name = textView().lparams(width = 0, weight = 1f)
            }

            linearLayout {
                // ...
            }
        }
    }.toView()
} 

我要返回包装在Fragment.onCreateView(...)中的UI { ... }.toView()中的布局DSL Fragment.onCreateView(...)

从anko 0.8.1开始,正确的代码应为:

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return UI {
        verticalLayout {
            linearLayout {
                // ...
            }
            linearLayout {
                // ...
            }
        }
    }.view
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM