他の人の間隔を空けるために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エミュレーターで期待どおりに機能します。
ただし、Samsung Galaxy XCover 2(S7710)で返された測定幅Android 4.1.2電話、は16777214 ...私はすべてを試しました。_View.MEASURED_SIZE_MASK
_、しかし何も助けにはならなかった。
これについて助けていただけますか?前もって感謝します!
実際の値の代わりに_WRAP_CONTENT
_をmakeMeasureSpec()
に渡しても効果はありません。これらを一緒に使用することを意図したものではないと思いますが、.
_MeasureSpec.AT_MOST
_モード(基本的にMath.min()
)で、最初のパラメーター(親ビューのサイズや画面の寸法など)として実際の制約値を使用します。引数は仕様に入力した値です。およびビューの目的の寸法。
_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()
のコールスタックに何かがあります。それはこれを行います:)これはバグかどうか疑問に思います。多分それは否定的であり、例外か何かを投げるために議論をチェックするべきです。