Android笔记之View未显示前获得控件宽高

本文介绍如何在View未在界面上显示之前,通过预计算方法获得其准确的宽高,适用于XML文件中设置为准确值或wrap_content的情况,但不支持match_parent。方法包括设置LayoutParams的宽度和高度属性,然后调用measure方法计算。

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

要想在View未在界面上显示之前就获得它的宽高,我们需要这样做

    /**
     * 目前该方法只支持预计算宽高设置为准确值或wrap_content的情况,
     * 不支持match_parent的情况,因为view的父view还未预计算出宽高
     * @param v 要预计算的view
     */
    private void measureView(View v) {
        ViewGroup.LayoutParams lp = v.getLayoutParams();
        if (lp == null) {
            return;
        }
        int width;
        int height;
        if (lp.width > 0) {
            // xml文件中设置了该view的准确宽度值,例如android:layout_width="150dp"
            width = View.MeasureSpec.makeMeasureSpec(lp.width, View.MeasureSpec.EXACTLY);
        } else {
            // xml文件中使用wrap_content设定该view宽度,例如android:layout_width="wrap_content"
            width = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        }

        if (lp.height > 0) {
            // xml文件中设置了该view的准确高度值,例如android:layout_height="50dp"
            height = View.MeasureSpec.makeMeasureSpec(lp.height, View.MeasureSpec.EXACTLY);
        } else {
            // xml文件中使用wrap_content设定该view高度,例如android:layout_height="wrap_content"
            height = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        }

        v.measure(width, height);
    }

将要预算的view传入measureView方法,再调用getMeasuredWidth()、getMeasuredHeight()就可以获得将来实际显示的宽高了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值