Android Jelly Bean MeasureSpec错误

时间:2013-11-22 15:01:27

标签: android android-4.3-jelly-bean android-4.2-jelly-bean

我遇到了这个问题:https://stackoverflow.com/questions/20121696/slidingmenu-bug-in-android-4-3
但是现在我已经修好了,我想分享我的解决方案,因为可能有人也需要它 我会自己回答这个问题。

1 个答案:

答案 0 :(得分:5)

所以我遇到的问题在于当我们想要创建MeasureSpec时Build.VERSION_CODES.JELLY_BEAN_MR2出现问题:

MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams..., MeasureSpec.EXACTLY);

当我执行MeasureSpec.EXACTLY .measure(widthMeasureSpec, heightMeasureSpec);时,它会返回完全奇怪的值,因此如果我们使用MeasureSpec.AT_MOST而不是MeasureSpec.EXACTLY,则可以解决此问题。

希望将来帮助某人;)
ps:我不知道Android Kitkat(4.4,API 19)是否也有这个问题。

编辑:确实如此。

int widthMeasureSpec;
int heightMeasureSpec;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
    widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.MATCH_PARENT, View.MeasureSpec.AT_MOST);
    heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.WRAP_CONTENT, View.MeasureSpec.AT_MOST);
} else {
    widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.MATCH_PARENT, View.MeasureSpec.EXACTLY);
    heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.WRAP_CONTENT, View.MeasureSpec.EXACTLY);
}