我正在开发一个项目,我需要动态创建所有布局。代码非常难看,我正在寻找替代方案
ConstraintLayout是一个很好的选择吗?显然它仍然是一个测试版,这让我有点担忧。
我也刚刚发现了Anko Layouts,但我不确定它是否适用于复杂的布局。我认为还需要更多的时间来使用。
动态构建布局还有其他好的替代方案吗?
答案 0 :(得分:3)
嗨Moyo, 我知道什么类型的应用程序更好,你可以尝试json结构设计和隐蔽到动态布局。首先根据所需的小部件结构创建json,例如下面的
{
"type": "LinearLayout",
"orientation": "vertical",
"padding": "16dp",
"children": [{
"layout_width": "200dp",
"gravity": "center",
"type": "TextView",
"text": "@{user.profile.name}"
}, {
"type": "HorizontalProgressBar",
"layout_width": "200dp",
"layout_marginTop": "8dp",
"max": 6000,
"progress": "@{user.profile.experience}"
}]
}
然后我们在gitHub中有很多json到android视图转换库。一些链接是,
Proteus lib from Flipkart Tangram Json2View
这个想法的最大好处之一是上传应用程序后,您可以通过后端更新json动态更改设计。
答案 1 :(得分:1)
我的建议是使用Anko而不是Constraint布局,因为Constraint布局只是强大的相对布局,因此动态添加约束可能会产生问题,并且由于其性能,布局的动态创建也不被视为好方法。
我们可以在这里利用Anko,因为它旨在解决上述问题。所以从官方的Anko文件
Anko Layouts是一款用于编写动态Android布局的DSL。这里有一个 使用Anko DSL编写的简单UI:
verticalLayout {
val name = editText()
button("Say Hello") {
onClick { toast("Hello, ${name.text}!") }
} }
上面的代码在LinearLayout中创建了一个按钮,并将OnClickListener附加到该按钮。而且,onClick接受 一个暂停lambda,所以你可以在里面编写你的异步代码 听众!
请注意,这是完整的布局代码。不需要XML!
因此,您可以轻松地将您的业务逻辑集成到Anko
中