亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

自定義View:Measure過程說明之MeasureSpec類詳細講解

小云
102
2023-09-19 06:51:07
欄目: 編程語言

MeasureSpec類是Android中用于測量View的尺寸的一個工具類。在自定義View中,我們需要重寫onMeasure方法來確定View的尺寸,而MeasureSpec類就是用來幫助我們完成這個過程的。

MeasureSpec類包含了一個32位的int值,其中高2位表示測量模式(MeasureSpec的模式有三種:UNSPECIFIED、EXACTLY、AT_MOST),低30位表示尺寸大小。

在View的測量過程中,MeasureSpec類的作用主要有兩個方面:

  1. 解析父容器傳遞給子View的MeasureSpec,得到測量模式和尺寸大小;

  2. 根據測量模式和子View的期望尺寸,計算出子View的測量尺寸。

解析MeasureSpec的方法有兩個:getMode(int measureSpec)和getSize(int measureSpec)。其中getMode方法用于獲取測量模式,getSize方法用于獲取尺寸大小。

  1. getMode方法:

getMode方法的作用是獲取MeasureSpec中的測量模式。測量模式有三種:

  • UNSPECIFIED(未指定模式):父容器對子View沒有任何限制,子View可以任意大小;

  • EXACTLY(精確模式):父容器指定了子View的確切尺寸,子View的大小必須和MeasureSpec中的尺寸大小一致;

  • AT_MOST(最大模式):父容器指定了子View的最大尺寸,子View的大小不能超過MeasureSpec中的尺寸大小。

  1. getSize方法:

getSize方法的作用是獲取MeasureSpec中的尺寸大小。尺寸大小是一個具體的數值,表示了View的期望尺寸。

在自定義View中,我們通常會根據測量模式和尺寸大小來計算View的測量尺寸。計算測量尺寸的方法有兩個:resolveSize(int size, int measureSpec)和resolveSizeAndState(int size, int measureSpec, int childMeasuredState)。其中resolveSize方法用于計算測量尺寸,resolveSizeAndState方法除了計算測量尺寸外,還可以保存子View的狀態。

  1. resolveSize方法:

resolveSize方法的作用是根據測量模式和尺寸大小,計算出View的測量尺寸。計算的規則如下:

  • 如果測量模式是EXACTLY,直接返回尺寸大小;

  • 如果測量模式是AT_MOST,返回尺寸大小和MeasureSpec中的尺寸大小的較小值;

  • 如果測量模式是UNSPECIFIED,返回尺寸大小。

  1. resolveSizeAndState方法:

resolveSizeAndState方法的作用和resolveSize方法類似,只是它還可以保存子View的狀態。子View的狀態是一個32位的int值,其中高2位表示測量狀態(子View的測量狀態有三種:MEASURED_STATE_TOO_SMALL、MEASURED_STATE_MASK、MEASURED_STATE_SHIFT),低30位表示尺寸大小。

在自定義View中,我們通常會使用resolveSizeAndState方法來計算測量尺寸,并保存子View的狀態。

綜上所述,MeasureSpec類是用于測量View尺寸的一個工具類,通過解析MeasureSpec來獲取測量模式和尺寸大小,并根據測量模式和尺寸大小計算View的測量尺寸。在自定義View中,我們可以使用MeasureSpec類來完成View的測量過程。

0
寿光市| 陕西省| 泸西县| 弥勒县| 精河县| 资讯| 曲阳县| 淮阳县| 通道| 遵化市| 无极县| 广灵县| 通河县| 东乌珠穆沁旗| 沂水县| 新巴尔虎左旗| 安溪县| 肇源县| 苏尼特左旗| 上饶市| 天津市| 修文县| 东至县| 泽库县| 武城县| 普安县| 建平县| 开封县| 开平市| 宝坻区| 长白| 大丰市| 玛多县| 衡水市| 乐山市| 商南县| 原平市| 明光市| 丹江口市| 丰顺县| 利川市|