user7342339
user7342339

Reputation: 23

How to make the height match the relative width?

so I got this xml code:

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:orientation="horizontal"
            android:layout_weight="1">

            <ImageView
                android:layout_width="0dp"
                android:layout_height="200dp"
                android:layout_weight="1"
                android:background="@drawable/profilbildfrau"
                android:id="@+id/bild0"
                >

            </ImageView>

            <ImageView
                android:layout_width="0dp"
                android:layout_height="200dp"
                android:layout_weight="1"
                android:background="@drawable/profilbildfrau"
                android:id="@+id/bild1">

            </ImageView>

            <ImageView
                android:layout_width="0dp"
                android:layout_height="200dp"
                android:layout_weight="1"
                android:background="@drawable/profilbildfrau"
                android:id="@+id/bild2">

            </ImageView>

        </LinearLayout> (...)

And this is my JavaCode:

ImageView beispiel;
    ImageView[] profilbilder = new ImageView[21];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hauptmenue);

        beispiel = (ImageView)findViewById(R.id.bild0);
        int weite = beispiel.getWidth();

        profilbilder[0] = (ImageView)findViewById(R.id.bild0);
        profilbilder[1] = (ImageView)findViewById(R.id.bild1);
        profilbilder[2] = (ImageView)findViewById(R.id.bild2);
        profilbilder[3] = (ImageView)findViewById(R.id.bild3);
        profilbilder[4] = (ImageView)findViewById(R.id.bild4);
        profilbilder[5] = (ImageView)findViewById(R.id.bild5);
        profilbilder[6] = (ImageView)findViewById(R.id.bild6);
        profilbilder[7] = (ImageView)findViewById(R.id.bild7);
        profilbilder[8] = (ImageView)findViewById(R.id.bild8);
        profilbilder[9] = (ImageView)findViewById(R.id.bild9);
        profilbilder[10] = (ImageView)findViewById(R.id.bild10);
        profilbilder[11] = (ImageView)findViewById(R.id.bild11);
        profilbilder[12] = (ImageView)findViewById(R.id.bild12);
        profilbilder[13] = (ImageView)findViewById(R.id.bild13);
        profilbilder[14] = (ImageView)findViewById(R.id.bild14);
        profilbilder[15] = (ImageView)findViewById(R.id.bild15);
        profilbilder[16] = (ImageView)findViewById(R.id.bild16);
        profilbilder[17] = (ImageView)findViewById(R.id.bild17);
        profilbilder[18] = (ImageView)findViewById(R.id.bild18);
        profilbilder[19] = (ImageView)findViewById(R.id.bild19);
        profilbilder[20] = (ImageView)findViewById(R.id.bild20);



        for(int i = 0; i < 20; i++){
            profilbilder[i].setMaxHeight(weite);
            //ImageView bild = profilbilder[i];
            //bild.getLayoutParams().height = weite;
            profilbilder[i].setMinimumHeight(weite);
            profilbilder[i].requestLayout();
        }
    }

My goal is to get the width of one of the pictures after it has its correct width fitting the screen and then set the height of each picture to the width of the picture. Tried some code, this one is my recent one, but the height won't match the width. What am I missing here?

Thank you in advance, Julian

Upvotes: 0

Views: 266

Answers (1)

Nika Kurdadze
Nika Kurdadze

Reputation: 2512

In onCreate the view is not sized yet and normally the width will return 0. Add OnGlobalLayoutListener to the view and get the height and width of the ImageView inside onGlobalLayout. Then you can set a new LayoutParams to every ImageView :

 beispiel.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                beispiel.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            } else {
                beispiel.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            }

            int width = beispiel.getWidth();
            for(int i = 0; i <= 20; i++){
                // make the height and width of each ImageView equal to width of beispiel
                profilbilder[i].setLayoutParams(new LinearLayout.LayoutParams(width, width));
            }
        }
    });

Upvotes: 1

Related Questions