Android在onCreate中获取View的宽高信息、位置信息等


方法一(推荐)

getViewTreeObserver()

        flMenuTop.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
               ...
                //移除监听。
                //OnGlobalLayoutListener可能会被多次触发,因此在得到了高度之后,要将OnGlobalLayoutListener注销掉。
                flMenuTop.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        });

kotlin中的写法
获取到宽高后,将监听移除

        iv_floating_right.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
            override fun onGlobalLayout() {
                if (originX == 0) {
                    originX = iv_floating_right.x.toInt()
                } else {
                    iv_floating_right.viewTreeObserver.removeOnGlobalLayoutListener(this)
                }
                LogUtils.d("originX=" + originX)
            }
        })

方法二,使用handler延时获取

     weakHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
            ...
            }

        }, 500);

方法三,在onWindowFocusChanged中获取(推荐)

    override fun onWindowFocusChanged(hasFocus: Boolean) {
        super.onWindowFocusChanged(hasFocus)
        //页面每次被遮挡、重新显示,都会回调该方法。
        //BottomSheetDialogFragment的启动也会触发onWindowFocusChanged
        //BottomSheetDialogFragment的启动不会触发onPause、onResume
        Log.d(TAG, "onWindowFocusChanged: ")
        //延迟初始sdk,方法内做了判断,只会初始化一次
        ApplicationLike.initSdk(applicationContext)
        //此时可以获取到控件的宽高信息,因为此时xml已经绘制到屏幕上了
    }

方法四(推荐)

  • 通过view.post进行获取
        binding.stickerLayout.post {
            LogUtils.d("width=${binding.stickerLayout.width}")
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值