以编程方式设置边距不会让我每次重新分配值

时间:2015-01-21 15:35:39

标签: android xml margin

我正在尝试在运行时设置一个布局,该布局与屏幕左侧的按钮相交,然后是右侧。我有一个按钮字符串的数组列表,它迭代,为每个按钮创建一个按钮,然后应用一些样式。几乎所有的造型都有效,除了我用来将它们推到屏幕一侧的边距不能正确交替。我试图从左侧或右侧进行边距推动,但似乎按钮只停留在一列内。

首先是代码:

        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++;
    }

以下是它如何出现的截图: Screenshot of App result

1 个答案:

答案 0 :(得分:2)

由于我不知道的某些原因,重用LayoutParams会导致愚蠢的结果。每次需要时对它们进行实例化可以帮助解决这个问题。

这意味着将它们放在for loop内,在这种情况下

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