Add Buttons dynamically depending on screen width

帅比萌擦擦* 提交于 2019-12-12 05:29:31

问题


I'm trying to add buttons dynamically depending on screen width.

i.e. if I get 6 buttons then I need to position them accordingly, so that the buttons appear at the center with equal spacings on left parent and right parent.

Here is the piece of code which I'm trying but no result:

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

    }
}

In the above code I have a Relative layout with height 25dp and width fill_parent. I am able to add the buttons but they are not positioned at the center.


回答1:


If all you want to is center those ImageButtons with equal space left and right then you could simple wrap them in a LinearLayout and then center that LinearLayout in the parent 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);

If you want to write more code just to do the above then you could modify your current layout and add this element as an anchor:

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

and then in code position the ImageButtons to the left and right of this anchor 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--;
        }

If you want to calculate the number of ImageButtons that fit the screen(and center them horizontally) you should have mentioned.



来源:https://stackoverflow.com/questions/11030172/add-buttons-dynamically-depending-on-screen-width

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!