根据屏幕宽度动态添加按钮

时间:2012-06-14 09:23:36

标签: android button dynamic

我正在尝试根据屏幕宽度动态添加按钮。

即。如果我得到6个按钮,那么我需要相应地定位它们,这样按钮就会出现在左侧父母和右父母的中心位置相等。

以下是我正在尝试的但没有结果的代码:

private void btmBarBtns(int position) {

    RelativeLayout rlLayout;
    RelativeLayout.LayoutParams layoutParams;

    int leftMargin = scrWidth/pageCount;

    CommonMethods.getSystemOutput("Left Margin::::"+leftMargin);

    for (int i = 0; i < pageCount; i ++ ) {

        rlLayout = (RelativeLayout) findViewById(R.id.ivBottomBar);

        layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        layoutParams.leftMargin = leftMargin;

        ib = new ImageButton(this);
        ib.setId(i);
        ib.setLayoutParams(layoutParams);
        ib.setBackgroundResource(R.drawable.white_circle_32x32);

        rlLayout.addView(ib);
        leftMargin = leftMargin + 70;

        if (ib.getId() == position) {
            ib.setBackgroundResource(R.drawable.black_circle_32x32);
        }

    }
}

在上面的代码中,我有一个相对布局,高度为25dp,宽度为fill_parent。我可以添加按钮,但它们不在中心位置。

1 个答案:

答案 0 :(得分:1)

如果你想要的是那些ImageButtons左右相等的空间,那么你可以简单地将它们包裹在LinearLayout中,然后将LinearLayout放在父RelativeLayout中。 }}:

    RelativeLayout rlLayout = (RelativeLayout) findViewById(R.id.parent);
    LinearLayout container = new LinearLayout(this);
    for (int i = 0; i < 5; i++) {
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        ImageButton ib = new ImageButton(this);
        ib.setId(i);
        ib.setLayoutParams(layoutParams);
        ib.setBackgroundResource(R.drawable.ic_launcher);
        container.addView(ib);

        if (ib.getId() == position) {
            ib.setBackgroundResource(R.drawable.black_circle_32x32);
        }
    }
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL,
            RelativeLayout.TRUE);
    rlLayout.addView(container, layoutParams);

如果您想编写更多代码来执行上述操作,那么您可以修改当前布局并将此元素添加为锚点:

<View
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_centerHorizontal="true"
    android:id="@+id/anchor" />

然后在代码位置ImageButtons位于此锚View的左侧和右侧:

int anchorId = R.id.anchor;     
        int btnsNr = 6; // this is the number of Buttons
        RelativeLayout rlLayout = (RelativeLayout) findViewById(R.id.parent);
        if (btnsNr % 2 != 0) {
            anchorId = 1000;
            btnsNr--;
            ImageButton imgb = new ImageButton(this);
            imgb.setImageResource(R.drawable.shop_open);
            imgb.setId(anchorId);
            RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
            rlp.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
            rlLayout.addView(imgb, rlp);
        }
        int whichPart = 1;
        while (whichPart >= 0) {
            int previousId = anchorId;
            for (int i = 0; i < (btnsNr / 2); i++) {
                RelativeLayout.LayoutParams tmp = new RelativeLayout.LayoutParams(
                        RelativeLayout.LayoutParams.WRAP_CONTENT,
                        RelativeLayout.LayoutParams.WRAP_CONTENT);
                if (whichPart == 1) {
                    tmp.addRule(RelativeLayout.LEFT_OF, previousId);
                } else {
                    tmp.addRule(RelativeLayout.RIGHT_OF, previousId);
                }
                ImageButton imgb = new ImageButton(this);
                previousId += whichPart == 1 ? -1 : 1;
                imgb.setId(previousId);
                imgb.setImageResource(R.drawable.shop_open);
                rlLayout.addView(imgb, tmp);
            }
            whichPart--;
        }

如果你想计算适合屏幕的ImageButtons的数量(并将它们水平居中),你应该提到。