什么时候应用MeasureSpec.UNSPECIFIED和MeasureSpec.AT_MOST?

Kai*_*Kai 34 android

我有点困惑MeasureSpec.UNSPECIFIEDMeasureSpec.AT_MOST.我知道,当match_parent或恒定的尺寸值被设置为layout_widthlayout_height,MeasureSpec.EXACTLY将测量视图时被应用.

然后,怎么样MeasureSpec.UNSPECIFIEDMeasureSpec.AT_MOST

我的理解是,当layout_widthlayout_height设置为wrap_content,MeasureSpec.UNSPECIFIED将被应用,因为wrap_content装置的图的高度或宽度可以是根据内容的任何尺寸.但很多文章都表示这wrap_content意味着MeasureSpec.AT_MOST.所以我很困惑.我不知道什么时候MeasureSpec.AT_MOST应该应用.

Dee*_*eeV 68

视图大小的基本定义如下:

MeasureSpec.EXACTLY - 视图应该是这么多像素,无论它实际上有多大.

MeasureSpec.AT_MOST - 如果视图尺寸较小,则视图可以是此尺寸或更小.

MeasureSpec.UNSPECIFIED - 视图可以是它需要的任何大小,以显示它需要显示的内容.

MeasureSpec.AT_MOST将应用于WRAP_CONTENT 父视图的大小绑定时已设置的视图.例如,您的父视图可能绑定到屏幕大小.它的孩子也会受到这种规模的束缚,但它可能不会那么大.因此,父视图将MeasureSpec设置为AT_MOST告诉孩子它可以是介于0和屏幕大小之间的任何位置.孩子必须进行调整以确保其符合所提供的范围.

在特殊情况下,界限无关紧要.例如,a ScrollView.在a的情况下,ScrollView子视图的高度是无关紧要的.因此,它将UNSPECIFIED为儿童提供视图,告诉孩子他们可以达到他们需要的高度.该ScrollView会办理他们的图纸和位置.