Использование ConstraintLayout с Kotlin Anko - PullRequest
0 голосов
/ 23 сентября 2018

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

У меня есть две кнопкигоризонтально в верхней части экрана в constraintLayout, действуя как цепочка так, чтобы они были отцентрированы по горизонтали.

Сначала я использовал старые добрые XML-макеты и Android Studio, чтобы я мог взглянуть на кодпроизведено.

Вот мой не-Anko XML-макет

<?xml version="1.0" encoding="utf-8"?>

<Button
    android:id="@+id/button4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="First"
    app:layout_constraintEnd_toStartOf="@+id/button5"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintHorizontal_chainStyle="spread"
    app:layout_constraintStart_toStartOf="parent"
     />

<Button
    android:id="@+id/button5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Second"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toEndOf="@+id/button4"
    />

Это дает правильный макет, как показано ниже

what I expect

Ниже приведено то, что, по моему мнению, должно быть эквивалентным кодом Котлина-Анко для получения того же результата.

constraintLayout {

                id = R.id.constraintRoot
                val first : Button = button("First"){
                    id = R.id.firstButton
                    width = wrapContent
                    height = wrapContent

                }.lparams{
                    //topToTop = ConstraintSet.PARENT_ID
                    startToStart = PARENT_ID
                    endToStart = R.id.secondButton
                    horizontalChainStyle = spread
                    editorAbsoluteY = 16
                    horizontalBias = 0.5f
                }

                val second : Button = button("Second"){
                    id = R.id.secondButton
                    width = wrapContent
                    height = wrapContent
                }.lparams{
                    startToEnd = R.id.firstButton
                    endToEnd = PARENT_ID
                    editorAbsoluteY = 16
                    horizontalBias = 0.5f
                }
            }

Но по какой-то причиневместо этого получается следующий результат:

wrong

Как видите, кнопки не равномерно распределены и не отцентрированы по горизонтали внутри вида.

Есть что-то, что я пропускаю илиConstraintLayout для Anko еще не совсем готов к использованию?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Ширина и высота кнопок должны быть lparams (либо в теле lparams, либо в качестве параметров для lparams (). Я не уверен, решит ли это проблему.

0 голосов
/ 24 сентября 2018

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

constraintLayout {

                id = R.id.constraintRoot
                val first : Button = button("First"){
                    id = R.id.firstButton
                    width = wrapContent
                    height = wrapContent
                }.lparams{
                    endToStart = R.id.verticalGuideline
                    startToStart = ConstraintSet.PARENT_ID
                }

                val gl : Guideline = guideline {
                    id = R.id.verticalGuideline
                }.lparams {
                    orientation = ConstraintLayout.LayoutParams.VERTICAL
                    guidePercent = 0.5f
                }

                val second : Button = button("Second"){
                    id = R.id.secondButton
                    width = wrapContent
                    height = wrapContent
                }.lparams{
                    startToEnd = R.id.verticalGuideline
                    endToEnd = ConstraintSet.PARENT_ID
                }
            }
...