2

I have a layout to which I need to add a view when I focus on a TexInputEditText. I tried creating a textview programmatically, I set an id for it and then I proceeded to clone my constraint layout constraints with a constraintset. The problem is that when I set the constraints for the added textview with constraintset.connect, no matter what I put there the constraints for the textview will always be 0,0 and I can't wrap my head around that. Here's the code:

xml layout:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.ParametersList">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/headerLayoutParameters"
        android:layout_width="match_parent"
        android:layout_height="69dp"
        android:background="@color/dark"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/parametri"
            android:textColor="@color/white"
            android:textSize="14sp"
            android:textStyle="bold"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>


    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintParamList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/headerLayoutParameters"
        >


        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/textInputLayout23"
            style="@style/customInputText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="16dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/paramAnamnesi"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/back_light"
                android:drawableLeft="@drawable/parameters_icon"
                android:drawableRight="@drawable/options_icon_points"
                android:drawablePadding="25dp"
                android:inputType="none"
                android:text="@string/anamnesi"
                android:textColor="@color/dark"
                android:textStyle="bold" />

        </com.google.android.material.textfield.TextInputLayout>

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/textInputLayout24"
            style="@style/customInputText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="16dp"
            app:layout_constraintTop_toBottomOf="@+id/textInputLayout23"
            tools:layout_editor_absoluteX="16dp">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/paramsPlica"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/back_light"
                android:drawableLeft="@drawable/parameters_icon"
                android:drawableRight="@drawable/options_icon_points"
                android:drawablePadding="25dp"
                android:text="@string/plica"
                android:inputType="none"
                android:textColor="@color/dark"
                android:textSize="14sp"
                android:textStyle="bold" />

        </com.google.android.material.textfield.TextInputLayout>

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/textInputLayout25"
            style="@style/customInputText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="16dp"
            app:layout_constraintTop_toBottomOf="@+id/textInputLayout24"
            tools:layout_editor_absoluteX="16dp">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/paramsMisureAntro"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/back_light"
                android:drawableLeft="@drawable/parameters_icon"
                android:drawableRight="@drawable/options_icon_points"
                android:drawablePadding="25dp"
                android:text="@string/misure_antropometriche"
                android:inputType="none"
                android:textColor="@color/dark"
                android:textSize="14sp"
                android:textStyle="bold" />


        </com.google.android.material.textfield.TextInputLayout>


        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/textInputLayout26"
            style="@style/customInputText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="16dp"
            app:layout_constraintTop_toBottomOf="@+id/textInputLayout25"
            tools:layout_editor_absoluteX="16dp">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/paramsNote"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/back_light"
                android:drawableLeft="@drawable/parameters_icon"
                android:drawableRight="@drawable/options_icon_points"
                android:drawablePadding="25dp"
                android:text="@string/note"
                android:textColor="@color/dark"
                android:inputType="none"
                android:textSize="14sp"
                android:textStyle="bold" />


        </com.google.android.material.textfield.TextInputLayout>

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/addParamsLayout"
            style="@style/customInputText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="16dp"
            app:layout_constraintTop_toBottomOf="@+id/textInputLayout26">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/paramsAddParam"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/back_light"
                android:drawableLeft="@drawable/add_person"
                android:drawableRight="@drawable/options_icon_points"
                android:drawablePadding="25dp"
                android:text="@string/aggiungi_personalizzato"
                android:textColor="@color/dark"
                android:inputType="none"
                android:textSize="14sp"
                android:textStyle="bold" />


        </com.google.android.material.textfield.TextInputLayout>


    </androidx.constraintlayout.widget.ConstraintLayout>




</androidx.constraintlayout.widget.ConstraintLayout>

Java code:

ConstraintLayout constraintLayout;


 constraintLayout=findViewById(R.id.constraintParamList);



      textInputEditText5.setOnFocusChangeListener(new View.OnFocusChangeListener() { //AGGIUNTA DINAMICA LAYOUT PER NEW PARAM
                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    if(textInputEditText5.isFocused()){
    
                        EditText editText=new EditText(getApplicationContext());
                        editText.setText("ADDED PARAMETER");
                        ConstraintSet constraintSet=new ConstraintSet();
    
                        int idCreato=8;
                        editText.setId(idCreato);
                        ConstraintLayout.LayoutParams addedParams= new ConstraintLayout.LayoutParams(
                                ConstraintLayout.LayoutParams.WRAP_CONTENT,
                                ConstraintLayout.LayoutParams.WRAP_CONTENT
                        );
                        editText.setLayoutParams(addedParams);
                        constraintLayout.addView(editText);
                        constraintSet.clone(constraintLayout);
                        constraintSet.connect(idCreato, ConstraintSet.TOP,R.id.paramsAddParam, ConstraintSet.BOTTOM, 16);
                        constraintSet.applyTo(constraintLayout);
    
    
    
    
    
                        //TODO FAR FUNZIONARE AGGIUNTA DINAMICA LAYOUT PARAMETRI
    
    
                    }else{
    
                    }
                }
            });

1 Answer 1

1

Constraints can only be applied to direct children of ConstraintLayout. You are trying to connect your new view with a TextInputEditText that is a child of a TextInputLayout. Instead of

constraintSet.connect(idCreato, ConstraintSet.TOP,R.id.paramsAddParam, ConstraintSet.BOTTOM, 16);

try

constraintSet.connect(idCreato, ConstraintSet.TOP,R.id.addParamsLayout, ConstraintSet.BOTTOM, 16);

to see if that helps.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.