当我看到这段文字时,我正在弄乱MeasureSpec:
注意:在API级别17及更低级别,makeMeasureSpec的实现使得参数的顺序无关紧要,并且任何一个值的溢出都可能影响生成的MeasureSpec。 RelativeLayout受此错误的影响。针对API级别大于17的应用将获得固定的,更严格的行为。
所以这让我想知道:如果我为API 14构建应用程序,但是我在API 22设备上运行它将修复错误或将< API 17的错误仍存在于22设备上?
答案 0 :(得分:4)
makeMeasureSpec(API 17<)方法的实现如下:
public static int makeMeasureSpec(int size, int mode) {
if (sUseBrokenMakeMeasureSpec) {
return size + mode;
} else {
return (size & ~MODE_MASK) | (mode & MODE_MASK);
}
}
正如您所看到的,它的返回值取决于sUseBrokenMakeMeasureSpec
类构造函数中value is assigned View
的值:
sUseBrokenMakeMeasureSpec = targetSdkVersion <= JELLY_BEAN_MR1;
因此,只有应用程序的目标才能确定行为。通过这种方式,较新的系统可以保持与旧应用程序的兼容性,从而消除旧行为。