学习鸿洋大神的自定义View(一)的笔记

本文解析了Android中Rect类的width()和height()方法的作用,并详细介绍了MeasureSpec的三种模式:EXACTLY、AT_MOST和UNSPECIFIED。通过具体示例说明了如何根据不同模式计算视图的尺寸。

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

①初步明白Rect
Rect.width(),这个方法是获取控件中内容的宽度,height()获取控件内容的高度;

②当xml文件中的宽高设为wrap_content时,要自己,获取内容的宽高,来计算背景的宽度和高度,我们需要自己进行测量控件大小时,即重写onMesure方法”:
MeasureSpec的specMode,一共三种类型:
EXACTLY:一般是设置了明确的值或者是MATCH_PARENT
AT_MOST:表示子布局限制在一个最大值内,一般为WRAP_CONTENT
UNSPECIFIED:表示子布局想要多大就多大,很少使用

获取方法:

 int specMode = MeasureSpec.getMode(widthMeasureSpec);
 int specSize = MeasureSpec.getSize(widthMeasureSpec);
 specMode = MeasureSpec.getMode(heightMeasureSpec);
 specSize = MeasureSpec.getSize(heightMeasureSpec);

specMode 是得到xml文件中宽高使用的是WRAP_CONTENT还是MATCH_PARENT,
specSize 得到布局的宽高,

有一个奇怪的现象,还没明白,当使用WRAP_CONTENT时

   switch (specMode)
        {
            case MeasureSpec.EXACTLY:
                width = getPaddingLeft() + getPaddingRight() + specSize;
                Log.d("CustomTextView","specSize()    "+specSize);
//              Log.d("CustomTextView"," mRect.width()()"+ mRect.width());
                break;
            case MeasureSpec.AT_MOST:
                width = getPaddingLeft() + getPaddingRight() + mRect.width();
//                Log.d("CustomTextView"," mRect.width()()"+ mRect.width());
                Log.d("CustomTextView","specSize()2    "+specSize);
                break;
        }

这里写图片描述

打印的结果是这样的,MeasureSpec.EXACTLY中的specSize为318是内容的宽度,MeasureSpec.AT_MOST中打印的却是布局的宽度,不太明白,有哪位大神看了,希望给我解惑。
xml文件中使用MATCH_PARENT时,specSize的值都是一样的,

//设置宽高
setMeasuredDimension(width, height);

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值