Get Actual Height of View

前端 未结 2 1779
悲&欢浪女
悲&欢浪女 2021-01-03 06:18

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 si

相关标签:
2条回答
  • 2021-01-03 06:49

    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.
        }
    });
    
    0 讨论(0)
  • 2021-01-03 06:51

    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 (i.e. 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).

    0 讨论(0)
提交回复
热议问题