Zoeken…


Opmerkingen

Merk op dat een ViewTreeObserver instantie die aan een View instantie is gekoppeld, ongeldig kan worden terwijl die View nog in leven is. Van de View.getViewTreeObserver :

// The returned ViewTreeObserver observer is not guaranteed to remain
// valid for the lifetime of this View. If the caller of this method keeps
// a long-lived reference to ViewTreeObserver, it should always check for
// the return value of {@link ViewTreeObserver#isAlive()}.

Als u dus eerder een luisteraar aan een ViewTreeObserver instantie hebt toegevoegd en deze nu wilt verwijderen, is het het gemakkelijkst om getViewTreeObserver op de overeenkomstige View instantie opnieuw aan te roepen om een nieuwe ViewTreeObserver instantie te ontvangen. (Het controleren van isAlive op een bestaand exemplaar is meer werk voor weinig voordeel; als de ViewTreeObserver niet meer in leven is, zul je die nieuwe referentie toch ophalen!)

Eerste dimensies van weergave in een activiteit berekenen

package com.example;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;

public class ExampleActivity extends Activity {

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

        final View viewToMeasure = findViewById(R.id.view_to_measure);

        // viewToMeasure dimensions are not known at this point.
        // viewToMeasure.getWidth() and viewToMeasure.getHeight() both return 0,
        // regardless of on-screen size.

        viewToMeasure.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                // viewToMeasure is now measured and laid out, and displayed dimensions are known.
                logComputedViewDimensions(viewToMeasure.getWidth(), viewToMeasure.getHeight());
                
                // Remove this listener, as we have now successfully calculated the desired dimensions.
                viewToMeasure.getViewTreeObserver().removeOnPreDrawListener(this);

                // Always return true to continue drawing.
                return true; 
            }
        });
    }

    private void logComputedViewDimensions(final int width, final int height) {
        Log.d("example", "viewToMeasure has width " + width);
        Log.d("example", "viewToMeasure has height " + height);
    }

}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow