简体   繁体   中英

Get Actual Height of View

Simple question, perhaps frustratingly-complex-but-hopefully-simple answer?

What is the "Best Practice" for getting the actual height of an element that has its size set to FILL_PARENT?

Definitely is more complicated than it seems it should be. An easier way that I've found compared to the answer in the suggested question, is to use a ViewTreeObserver. In your onCreate() method, you can use some code such as the following:

TextView textView = (TextView)findViewById(R.id.my_textview);
ViewTreeObserver observer = textView.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        //in here, place the code that requires you to know the dimensions.
        //this will be called as the layout is finished, prior to displaying.
    }
});

Just an extra amendment to the above answer, if you need to perform any operations to dimensions of multiple components in a view. The layout listener is called for each view as its layout completes. This is recursively true up to the root view component (ie child elements generate layout events, then the parent element generates its layout event). What this means is that you can simply hook onto the root view component's layout event to be notified when any view's layout changes.

ViewTreeObserver observer = this.findViewById(android.R.id.content).getViewTreeObserver();

Now you can expect that all your views will have width and height values set in onGlobalLayout because they've all performed their layout. This is obviously preferable to creating many listeners for each view that needs to expose its actual dimensions (unless of course you absolutely must have scope for which view generated the event, which is typically not necessary).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM