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());
        }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值