Создавать макеты динамически: 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