由于需求的关系,需要在一进入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()); } });
Oncreate里面获取控件宽高。
最新推荐文章于 2020-05-06 11:10:59 发布