动态构建布局:ConstraintLayout还是Anko布局?

时间:2018-02-09 11:39:11

标签: android android-layout android-constraintlayout anko

我正在开发一个项目,我需要动态创建所有布局。代码非常难看,我正在寻找替代方案

ConstraintLayout是一个很好的选择吗?显然它仍然是一个测试版,这让我有点担忧。

我也刚刚发现了Anko Layouts,但我不确定它是否适用于复杂的布局。我认为还需要更多的时间来使用。

动态构建布局还有其他好的替代方案吗?

2 个答案:

答案 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