中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

自定義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
德清县| 琼中| 漠河县| 玉门市| 二连浩特市| 纳雍县| 措勤县| 安陆市| 凤山县| 郓城县| 武安市| 田阳县| 丹阳市| 玉溪市| 太仆寺旗| 全州县| 稷山县| 福建省| 犍为县| 麦盖提县| 铁岭市| 永春县| 高青县| 古田县| 宜春市| 和林格尔县| 南康市| 游戏| 中宁县| 衡阳县| 潍坊市| 桦川县| 和平区| 毕节市| 长沙县| 阳泉市| 潮州市| 辽宁省| 辰溪县| 萝北县| 荥经县|