getMeasuredWidth返回完全错误的值

我必须测量一个View间隔其他人。 我使用这个代码:

 ViewGroup view = ...; view.setPadding(10, 0, 10, 0); int wrapContent = RelativeLayout.LayoutParams.WRAP_CONTENT; int specWidth = MeasureSpec.makeMeasureSpec(wrapContent, MeasureSpec.AT_MOST); view.measure(specWidth, specWidth); int questionWidth = view.getMeasuredWidth(); 

这在Android 4.3模拟器上按预期工作。

然而,三星Galaxy XCover 2(S7710)Android 4.1.2手机返回的测量宽度是16777214 …我尝试了一切,用View.MEASURED_SIZE_MASK屏蔽,但没有任何帮助。

你能提供一些帮助吗? 提前致谢!

  • TextView的onClick()不工作
  • 在android中放大和缩小animation
  • 为Gallery中的元素设置布局参数
  • android TextView文本大小的animation,而不是整个TextView
  • 在屏幕中心的TextView
  • 有关布局别名的Android文档不正确?
  • 具有圆angular的Android SlidingTabs样式选项卡
  • 如何从java代码读取自定义维度属性
  • WRAP_CONTENT而不是实际值传递给makeMeasureSpec()将不会有什么好处,我不认为这些是一起使用的。

    使用实际约束值作为第一个参数(例如父视图的大小或屏幕的尺寸)与MeasureSpec.AT_MOST模式,基本上是Math.min() – 参数是放入spec中的值,视图所需的尺寸。

    MeasureSpec.EXACTLY将使其使用规格值, MeasureSpec.UNSPECIFIED将使其使用视图的期望值。 所以,如果你没有任何约束(就像把你的视图放到一个ScrollView ),你的选项就是MeasureSpec.UNSPECIFIED – 任何值作为第一个参数。

    所以, {大师,纠正我,如果我错了}你得到WRAP_CONTENT行为以外的任何模式MeasureSpec.EXACTLY

    这就是说,尝试:

     ViewGroup view = ...; view.setPadding(10, 0, 10, 0); // Either this int specWidth = MeasureSpec.makeMeasureSpec(parentWidth, MeasureSpec.AT_MOST); // Or this int specWidth = MeasureSpec.makeMeasureSpec(0 /* any */, MeasureSpec.UNSPECIFIED); view.measure(specWidth, specWidth); int questionWidth = view.getMeasuredWidth(); 

    PS有趣的事情关于16777214 ,看看在二进制数: https : //www.google.ru/search? q=16777214+ in+binary它是-2 (这是不变的LayoutParams.WRAP_CONTENT值),但与8个最重要的位被截断了一个逻辑运算(因此没有减号),有一些measure()调用堆栈这样做:)我不知道这是否是一个错误。 也许它应该检查参数是否定的,抛出exception或什么的。