Oncreate里面获取控件宽高。

    由于需求的关系,需要在一进入activity就能得到控件的宽高,如果单纯的通过getMeasuredWidth获取宽,得到是0,
因为控件在初始化,还没通过OnDraw绘制图形。这里提供几种方案,简单方便的可以直接用个线程

@Override
protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button);
        button.post(new Runnable(){
             @Override
             public void run(){
             button.getHeight();
             button.getWidth());
        }
        });
        }

        方案 二:

        int w=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
        int h=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
        imageView.measure(w,h);
        int height=imageView.getMeasuredHeight();
        int width=imageView.getMeasuredWidth();
        备注:这个方法不适合计算耗时大的,毕竟多调了一次Onmeasure()方法;

        方案 三:

        ViewTreeObserver vto=imageView.getViewTreeObserver();
        vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){
             public boolean onPreDraw(){
             int height=imageView.getMeasuredHeight();
             int width=imageView.getMeasuredWidth();
             return true;
        }
        });
        备注:回调调用次数较多。方案 四:

        方案 四:

        ViewTreeObserver vto=imageView.getViewTreeObserver();
        vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
             @Override
             public void onGlobalLayout(){
             imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
             imageView.getHeight();
             imageView.getWidth());
        }
        });

你可能感兴趣的:(Android)