Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Onlayout method on custom layout extending RelativeLayout

What is the proper way to override onLayout method in a custom layout extending the RelativeLayout? I'm trying to place all views in sort of a table. The idea is to fill one row with ImageViews until it's full and then continue in the new row.

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);

        int idOfViewToTheLeft = 1;

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(getContext(),);

        ImageView bookmark;
        for(int counter = 1; counter < getChildCount(); counter++) {
            bookmark = (ImageView) findViewById(counter);
            if(counter > 1) {
               if(this.getWidth() > (bookmark.getLeft() + bookmark.getWidth())) {
                   params.addRule(RelativeLayout.RIGHT_OF, bookmark.getId() - 1);
               } else {
                   params.addRule(RelativeLayout.BELOW, idOfViewToTheLeft);
                   idOfViewToTheLeft = bookmark.getId();
               }
            }

            bookmark.setScaleType(ScaleType.CENTER_CROP);
        }
    }
    }
like image 510
Lovro Pandžić Avatar asked Jan 20 '23 12:01

Lovro Pandžić


1 Answers

I explain how to write custom layouts (and in particular a FlowLayout, which is what you want to do it seems like) in this presentation

Video available here.

like image 144
Romain Guy Avatar answered Jan 31 '23 08:01

Romain Guy