SuperBiasedMan
SuperBiasedMan

Reputation: 9969

Setting margins programmatically wont let me reassign the value each time

I'm trying to set up a layout at runtime that alternates from having a button on the left side of the screen on then the right side. I have an arrayList of button strings and it iterates through, creating a button for each and then applying some styling. Almost all the styling works, except that the margins I'm using to push them to the side of the screen aren't alternating correctly. I'm trying to make the margin push either from the left or the right, but it seems like the buttons are staying within only one column.

Here's the code first of all:

        LayoutParams noteStyle = new LayoutParams((int) getResources().getDimension(R.dimen.sticky_note_height),
                                              (int) getResources().getDimension(R.dimen.sticky_note_width));
    int margin = (int) getResources().getDimension(R.dimen.margin_huge);
    layout = (LinearLayout) findViewById(R.id.note_layout);
    int i = 0;
    for (String note : notes){
        Button btnTag;
        if (i % 2 == 0){
            btnTag = (Button) getLayoutInflater().inflate(R.layout.sticky_note_right, null);
            noteStyle.setMargins(margin,0,0,0);
        } else {
            btnTag = (Button) getLayoutInflater().inflate(R.layout.sticky_note_left, null);
            noteStyle.setMargins(0,0,margin,0);
        }
        btnTag.setLayoutParams(noteStyle);
        btnTag.setText(note);
        btnTag.setId(i);
        layout.addView(btnTag);
        ((Button) findViewById(i)).setOnClickListener(this);
        i++;
    }

And here's a screenshot of how it comes out: Screenshot of App result

Upvotes: 0

Views: 117

Answers (1)

codeMagic
codeMagic

Reputation: 44571

For some reason unknown to me, reusing the LayoutParams can cause goofy results. Instantiating them each time they are needed can help resolve this.

This means putting them inside the for loop, in this situation

for (String note : notes) {
    LayoutParams noteStyle = new LayoutParams((int) getResources().getDimension(R.dimen.sticky_note_height),
              (int) getResources().getDimension(R.dimen.sticky_note_width));

Upvotes: 2

Related Questions