Создавать макеты динамически: ConstraintLayout или Anko Layouts?

Я работаю над проектом, в котором мне нужно динамически создавать все макеты. Код довольно некрасивый и я ищу альтернативы

Является ли ConstraintLayout хорошим вариантом для этого? По-видимому, это все еще бета-версия, которая немного беспокоит меня.

Я также только что обнаружил макеты Anko, но я не уверен, что он подходит для сложных макетов. Кроме того, это потребует больше времени, чтобы привыкнуть, я полагаю.

Любая другая хорошая альтернатива для создания макетов динамически?

2 ответа

Привет, Мойо, я не знаю, какой тип приложения лучше, вы можете попробовать json Structure Desgin и перейти к динамическому макету. сначала создайте 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}"
      }]
    }

Тогда у нас есть много JSON в Android View конвертировать библиотеку в GitHub. некоторые ссылки

Протеус Либ из Flipkart Tangram Json2View

Одно из лучших преимуществ этой идеи - после загрузки приложения в живую. Вы можете динамически менять дизайн, обновляя json из бэкэнда.

Я предлагаю использовать Anko, а не макет Constraint, потому что макет Constraint - это просто мощная относительная компоновка, поэтому динамическое добавление ограничений может создавать проблемы, а также динамическое создание макетов также не считается хорошим подходом из-за его производительности.

Мы можем воспользоваться Anko здесь, потому что он предназначен для решения вышеуказанной проблемы. Так из официального документа Анко

Anko Layouts - это DSL для написания динамических макетов Android. Вот простой интерфейс, написанный на Anko DSL:

 verticalLayout {
    val name = editText()
    button("Say Hello") {
         onClick { toast("Hello, ${name.text}!") }
    } } 

Код выше создает кнопку внутри LinearLayout и присоединяет OnClickListener к этой кнопке. Более того, onClick принимает лямбда-приостановку, поэтому вы можете написать свой асинхронный код прямо в слушателе!

Обратите внимание, что это полный код макета. XML не требуется!

Таким образом, вы можете легко интегрировать свою бизнес-логику в Anko

Другие вопросы по тегам