67 votes

Android : Comment définir de manière programmatique le paramètre layout_constraintRight_toRightOf "parent" ?

J'ai une vue dans ConstrainLayout comme suit.

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxWidth="260dp"
        android:textColor="#FFF"
        android:textSize="16sp"
        app:layout_constraintLeft_toLeftOf="@+id/parent"
        app:layout_constraintTop_toBottomOf="@id/message_date"
        android:id="@+id/text_main"
        />

Je voudrais changer la vue pour app:layout_constraintLeft_toLeftOf="@+id/parent" o layout_constraintLeft_toRightOf="@+id/parent" de manière programmatique dans le recycleViewHolder en fonction de certaines conditions.

97voto

Darshan Soni Points 928

Voici un exemple de mise en place d'un bouton au bas de la vue parent en utilisant du code java :

ConstraintLayout constraintLayout;
ConstraintSet constraintSet;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    constraintLayout = (ConstraintLayout) findViewById(R.id.activity_main_constraint_layout);

    Button button = new Button(this);
    button.setText("Hello");
    constraintLayout.addView(button);

    constraintSet = new ConstraintSet();
    constraintSet.clone(constraintLayout);

    constraintSet.connect(button.getId(), ConstraintSet.LEFT, constraintLayout.getId(), ConstraintSet.RIGHT, 0);
    constraintSet.constrainDefaultHeight(button.getId(), 200);
    constraintSet.applyTo(constraintLayout);

}

pour obtenir quelque chose comme ça,

app:layout_constraintLeft_toLeftOf="@+id/parent" 

votre code java devrait ressembler à ceci

set.connect(YOURVIEW.getId(),ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.LEFT,0);

et d'obtenir quelque chose comme ça,

layout_constraintLeft_toRightOf="@+id/parent"

votre code java devrait ressembler à ceci,

set.connect(YOURVIEW.getId(),ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT,0);

Ici, je suppose que android:id="@+id/parent" est l'identifiant de votre ConstraintLayout parent .

6voto

onmyway133 Points 2196

Utilisez id

class MyLayout(context: Context) : ConstraintLayout(context) {

    fun show() {
        val view = ImageView(context)
        addView(view)
        val params = view.layoutParams as ConstraintLayout.LayoutParams
        params.height = 100 
        params.width = 50
        params.rightToRight = id
        view.requestLayout()
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X