K.Wu
K.Wu

Reputation: 3633

Adding constraints to views programmatically using ConstraintSet does not give expected result in Android?

I have a custom ConstraintLayout, and there's a TextView inside of it. I'm doing everything programmatically WITHOUT XML at all, here's the code:

public class CustomView extends ConstraintLayout {
    private TextView textView;

    public CustomView(Context context) {
        super(context);

        textView = new TextView(context);
        textView.setId(View.generateViewId());
        textView.setText("...");

        // Adding border to the view in order to visualize the frame
        GradientDrawable border = new GradientDrawable();
        border.setColor(Color.TRANSPARENT);
        border.setStroke(1, Color.BLACK);
        textView.setBackground(border);
        addView(textView);

        // Apply constraints to textView. Left = right = top = bottom = 120

        ConstraintSet set = new ConstraintSet();
        set.clone(this);
        set.connect(textView.getId(), ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT, 120);
        set.connect(textView.getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP, 120);
        set.connect(textView.getId(), ConstraintSet.RIGHT, ConstraintSet.PARENT_ID, ConstraintSet.RIGHT, 120);
        set.connect(textView.getId(), ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, 120);
        set.applyTo(this);
    }
}

When I run the above code, I'm getting some wrong results:

  1. If the text in textView is short:

enter image description here

  1. If the text in textView is long:

enter image description here

Upvotes: 1

Views: 59

Answers (1)

Vadim Eksler
Vadim Eksler

Reputation: 887

If I understand correct that your wrong result - you don't see the margins? I think this because defaults layout_width layout_height of your textview - wrap_content. Defaults must be 0dp. Try like:

LayoutParams lp = new LayoutParams(0, 0);
textView.setLayoutParams(lp);

Upvotes: 1

Related Questions