Kæmpe Klunker
Kæmpe Klunker

Reputation: 865

Arrange RelativeLayout below another dynamically

I'm trying to dynamically build relative layouts consisting of an image and a textview at the moment. I have tried building a loop to place the next relative layout below the former one, but I can't really make it work. The end result should be something like this, but I guess that if i figure out how to align below the former one, I can also figure out how to place it right_of the former relative layout.
enter image description here
Any suggestions? This is my code so far:

RelativeLayout container1 = (RelativeLayout) rootView
                .findViewById(R.id.main_layout);

        for (int i = 0; i < pictures.size(); i++) {
            RelativeLayout tile = new RelativeLayout(getActivity());
            tile.setId(i);
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                    LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
            params.height = height / 3;
            params.width = width / 2;
            tile.setLayoutParams(params);

            ImageButton ibGood = new ImageButton(getActivity());
            ibGood.setId(1);
            ibGood.setImageResource(pictures.get(0));
            ibGood.setAdjustViewBounds(true);
            ibGood.setMaxHeight(height / 3 / 5 * 4);
            ibGood.setMaxWidth(width);
            ibGood.setScaleType(ScaleType.CENTER_CROP);
            ibGood.setPadding(5, 5, 5, 5);

            tile.addView(ibGood);

            RelativeLayout.LayoutParams tvPriceParam = new RelativeLayout.LayoutParams(
                    LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
            tvPriceParam.addRule(RelativeLayout.BELOW, ibGood.getId());
            tvPriceParam.addRule(RelativeLayout.ALIGN_LEFT, ibGood.getId());

            TextView tvPrice = new TextView(getActivity());
            tvPrice.setId(2);
            tvPrice.setHeight(tile.getHeight() / 5);
            tvPrice.setWidth(tile.getWidth() / 5 * 2);
            tvPrice.setPadding(5, 0, 0, 5);
            tvPrice.setText(Integer.toString(price.get(0)));
            tile.addView(tvPrice, tvPriceParam);

            if (counter == 0) {
                container1.addView(tile);
            } else if (counter % 2 == 0) {
                RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(
                        LayoutParams.WRAP_CONTENT,
                        LayoutParams.WRAP_CONTENT);
                lay.addRule(RelativeLayout.BELOW, -1);
                tile.setLayoutParams(lay);
                container1.addView(tile);
            }

            counter += 1;
        }

Upvotes: 0

Views: 463

Answers (1)

Madhav Anadkat
Madhav Anadkat

Reputation: 56

you can make it with the custom gridview !! why you are doing this with the relative layout ?

here is the link which you can use to achieve what do you want..

http://www.learn-android-easily.com/2013/09/android-custom-gridview-example.html

http://www.caveofprogramming.com/uncategorized/custom-gridview-with-imageview-and-textview-in-android/

please visit 3 links are there you will get that you want .. with relative layout ..

Thanks, Madhav

Upvotes: 4

Related Questions