How to retrieve the dimensions of a view?

前端 未结 16 1661
小蘑菇
小蘑菇 2020-11-22 01:09

I have a view made up of TableLayout, TableRow and TextView. I want it to look like a grid. I need to get the height and width of this grid. The methods

16条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-11-22 01:21

    I believe the OP is long gone, but in case this answer is able to help future searchers, I thought I'd post a solution that I have found. I have added this code into my onCreate() method:

    EDITED: 07/05/11 to include code from comments:

    final TextView tv = (TextView)findViewById(R.id.image_test);
    ViewTreeObserver vto = tv.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    
        @Override
        public void onGlobalLayout() {
            LayerDrawable ld = (LayerDrawable)tv.getBackground();
            ld.setLayerInset(1, 0, tv.getHeight() / 2, 0, 0);
            ViewTreeObserver obs = tv.getViewTreeObserver();
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                obs.removeOnGlobalLayoutListener(this);
            } else {
                obs.removeGlobalOnLayoutListener(this);
            }
        }
    
    });
    

    First I get a final reference to my TextView (to access in the onGlobalLayout() method). Next, I get the ViewTreeObserver from my TextView, and add an OnGlobalLayoutListener, overriding onGLobalLayout (there does not seem to be a superclass method to invoke here...) and adding my code which requires knowing the measurements of the view into this listener. All works as expected for me, so I hope that this is able to help.

提交回复
热议问题