【问题标题】:Android Jelly Bean MeasureSpec bugAndroid Jelly Bean MeasureSpec 错误
【发布时间】:2013-11-22 15:01:27
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

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);
}

【讨论】:

  • 将 WRAP_CONTENT 作为第一个参数传递给 nakeMeasureSpec 有什么意义?
  • @pskink,好吧,因为在我的 XML 中我已经声明了 layout_width="wrap_content" 和 layout_height="match_parent",并且我认为(不是 100% 确定这一点)当我创建一个 MeasureSpec 我有使用相同的设置。
  • 或者,如果您不想分析源代码,请创建自定义视图,将 layout_width 设置为“wrap_content”,覆盖 onMeasure 并记录 MeasureSpec.toString(),并传递 onMeasure 的第一个参数
  • Kitkat 和 Lollipop 没有这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 2013-02-14
  • 2014-06-25
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多