14

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
        }
    }
}

如何在 a 中做同样的事情Fragment

我试图把那个verticalLayout块放进去,onCreateView但这个方法无法解决。我添加了anko-support-v4依赖项,但仍然没有运气。

4

3 回答 3

21

使用 Anko 0.8 AnkoComponent,如果您想将 UI 保存在一个单独的类中,您还可以使用 , 以便您可以在其他地方重用它。

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))
于 2015-12-27T05:32:34.183 回答
13

在挖掘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()
} 

我正在返回包含UI { ... }.toView()Fragment.onCreateView(...)

于 2015-11-17T03:28:22.697 回答
7

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

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return UI {
        verticalLayout {
            linearLayout {
                // ...
            }
            linearLayout {
                // ...
            }
        }
    }.view
} 
于 2016-03-21T15:55:13.063 回答