[英]Android Studio constraint set not setting constraints for programmatically added view
我有一個布局,當我關注 TexInputEditText 時,我需要向其中添加一個視圖。 我嘗試以編程方式創建一個 textview,我為它設置了一個 id,然后我繼續使用約束集克隆我的約束布局約束。 問題是,當我使用constraintset.connect 為添加的textview 設置約束時,無論我在那里放什么,textview 的約束都將始終為0,0,我無法理解這一點。 這是代碼:
xml布局:
<?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>
爪哇代碼:
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{
}
}
});
約束只能應用於ConstraintLayout 的直接子級。 您正在嘗試將您的新視圖與作為TextInputLayout子項的TextInputEditText 連接起來。 代替
constraintSet.connect(idCreato, ConstraintSet.TOP,R.id.paramsAddParam, ConstraintSet.BOTTOM, 16);
嘗試
constraintSet.connect(idCreato, ConstraintSet.TOP,R.id.addParamsLayout, ConstraintSet.BOTTOM, 16);
看看是否有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.