获取View的height 和width

在Android中,onCreate中无法直接获取View的宽度和高度,因为此时界面未绘制。可以使用测量方法、预绘制监听或全局布局监听来获取View的尺寸。测量方法包括调用`measure()`函数;预绘制监听`addOnPreDrawListener()`;全局布局监听`addOnGlobalLayoutListener()`。若为自定义View,可在`onSizeChanged()`回调中获取尺寸。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在onCreate中去获取View的长度和宽度是无效的,view.getWidth()和view.getHeight()都是0,这是因为此时界面还处于不可见状态,View还没有绘制出来,无法正确获得尺寸。但有时我们需要尽早的获取到View的长宽来进行一些操作,这个时候下面的一些方法是可行的:


  •        测量方法: 
            view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
            int height = view.getMeasuredHeight();
            int width = view.getMeasuredWidth();

  • 组件绘制之前监听
    ViewTreeObserver vto =view.getViewTreeObserver();
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                                         @Override
                                         public boolean onPreDraw() {
                                             int height =view.getMeasuredHeight();
                                             int width =view.getMeasuredWidth();
                                             return true;
                                         }
                                     });

     
  •   整体布局监听
        ViewTreeObserver vto = view.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){
                                          @Override
                                          public void onGlobalLayout() {
                                              view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                                              int height =view.getMeasuredHeight();
                                              int width =view.getMeasuredWidth();
                                          }
                                  });


  •   如果是自定义的view,可以在onSizeChange回调函数中获取并保存长和宽
        @Override
        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
            super.onSizeChanged(w, h, oldw, oldh);
            height = h;
            width = w;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值