如何以编程方式在Constraint布局中添加视图?

时间:2017-06-02 07:24:40

标签: android view kotlin android-constraintlayout

我正在尝试设计以下布局

<android.support.constraint.ConstraintLayout
            android:id="@+id/before_breakfast_option"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/diabetes_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="16dp"
                android:layout_marginStart="16dp"
                android:text="water"
                android:textAppearance="@style/TextAppearance.AppCompat.Medium"
                android:textColor="@color/black"
                app:layout_constraintBaseline_toBaselineOf="@+id/toogle_diabeties"
                app:layout_constraintLeft_toLeftOf="parent"/>

            <TextView
                android:textColor="@color/black"
                android:text="almonds"
                app:layout_constraintTop_toTopOf="parent"
                android:id="@+id/toogle_diabeties"
                app:layout_constraintRight_toRightOf="parent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

        </android.support.constraint.ConstraintLayout>

使用以下代码:

 var textView= TextView(this@DietStepFive)
                    textView.id=100
                    textView.text="water"
                    textView.background=ContextCompat.getDrawable(this@DietStepFive,R.drawable.rectangle_diet)
                    textView.setTextColor(ContextCompat.getColor(this@DietStepFive,R.color.black))

                    var textView1= TextView(this@DietStepFive)
                    textView1.id=101
                    textView1.text="almonds"
                    textView1.background=ContextCompat.getDrawable(this@DietStepFive,R.drawable.rectangle_diet)
                    textView1.setTextColor(ContextCompat.getColor(this@DietStepFive,R.color.black))

                    var constraintset= ConstraintSet()
                    constraintset.clone(before_breakfast_option)

                    //left to left of
                    constraintset.connect(textView.id,ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.LEFT,0)
                    //baseline
                    constraintset.connect(textView.id,ConstraintSet.BASELINE,textView1.id,ConstraintSet.BASELINE,0)
                    //right to right of
                    constraintset.connect(textView1.id,ConstraintSet.RIGHT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT,0)
                    //top to top of
                    constraintset.connect(textView1.id,ConstraintSet.TOP,ConstraintSet.PARENT_ID,ConstraintSet.TOP,0)

                    constraintset.applyTo(before_breakfast_option)

                    before_breakfast_option.addView(textView)
                    before_breakfast_option.addView(textView1)

但是XML代码给我的布局有两个textview,一个是左侧,一个是右侧,但是kotlin代码给了我左边的textview重叠。为什么呢?

什么错了?任何领导?

3 个答案:

答案 0 :(得分:2)

TextView添加到布局中,然后像设置XML时一样连接它们。您添加了已连接它们的视图。

移动

before_breakfast_option.addView(textView)
before_breakfast_option.addView(textView1)

var constraintset= ConstraintSet()

一切都应该有效。

答案 1 :(得分:0)

也许其他人将来会使用它。良好的睡眠和工作。 我使用了错误的约束。

而不是这个

//left to left of
constraintset.connect(textView.id,ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.LEFT,0)
//baseline
constraintset.connect(textView.id,ConstraintSet.BASELINE,textView1.id,ConstraintSet.BASELINE,0)
//right to right of
constraintset.connect(textView1.id,ConstraintSet.RIGHT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT,0)
//top to top of
constraintset.connect(textView1.id,ConstraintSet.TOP,ConstraintSet.PARENT_ID,ConstraintSet.TOP,0)

使用此

//left to right of
constraintset.connect(textView1.id,ConstraintSet.LEFT,textView.id,ConstraintSet.RIGHT,10)
//baseline
constraintset.connect(textView1.id,ConstraintSet.BASELINE,textView.id,ConstraintSet.BASELINE,0)

答案 2 :(得分:-2)

尝试替换app:layout_constraintRight_toRightOf="parent"

app:layout_constraintRight_toRightOf="@+id/toogle_diabeties"