gpt4 book ai didi

android - getMeasuredWidth 返回完全错误的值

转载 作者:IT老高 更新时间:2023-10-28 22:05:31 26 4
gpt4 key购买 nike

我必须测量一个 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 进行屏蔽,但没有任何帮助。

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

最佳答案

WRAP_CONTENT 而不是实际值传递给 makeMeasureSpec() 不会有任何好处,我不认为它们应该一起使用。

使用实际约束值作为第一个参数(例如父 View 的大小或屏幕的尺寸)与 MeasureSpec.AT_MOST 模式,基本上是 Math.min() -- 参数是您在规范中输入的值和 View 所需的尺寸。

MeasureSpec.EXACTLY 将使其使用规范值,MeasureSpec.UNSPECIFIED 将使其使用 View 的期望值。因此,如果您没有任何约束(例如,如果您将 View 放入 ScrollView),您的选择是 MeasureSpec.UNSPECIFIED - 并且任何值作为第一个参数。

所以,{大师,如果我错了,请纠正我}您会在 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();

PS16777214的趣事,看看二进制数:https://www.google.ru/search?q=16777214+in+binary它是 -2(它是 LayoutParams.WRAP_CONTENT 的常量值),但 8 个最高有效位被逻辑运算截断(因此没有减号),调用堆栈中有一些东西measure() 这样做的 :) 我想知道这是否是一个错误。也许它应该检查参数是否为否定并抛出异常或其他东西。

关于android - getMeasuredWidth 返回完全错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20586525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com