37

MeasureSpec.UNSPECIFIEDとについて少し混乱していMeasureSpec.AT_MOSTます。match_parentまたは 定数の寸法値がlayout_widthまたはlayout_heightに設定されてMeasureSpec.EXACTLYいる場合、ビューの測定時に適用されることを知っています。

MeasureSpec.UNSPECIFIEDでは、とはどうMeasureSpec.AT_MOSTでしょうか。

私の理解では、layout_widthまたはlayout_heightが に設定されている場合、ビューの高さまたは幅はコンテンツに応じて任意のサイズになる可能性があるためwrap_contentMeasureSpec.UNSPECIFIEDが適用されます。wrap_contentしかし、多くの記事はそれwrap_contentMeasureSpec.AT_MOST. だから私は混乱しています。MeasureSpec.AT_MOSTいつ申請すればいいのかわからない。

4

3 に答える 3

71

ビューのサイズ設定方法の基本的な定義は次のようになります。

MeasureSpec.EXACTLY- ビューは、実際のサイズに関係なく、正確にこの数のピクセルである必要があります。

MeasureSpec.AT_MOST- ビューのサイズを小さくすると、ビューはこのサイズまたはそれ以下になります。

MeasureSpec.UNSPECIFIED- ビューは、表示する必要があるコンテンツを表示するために、必要なサイズにすることができます。

MeasureSpec.AT_MOSTWRAP_CONTENT 親ビューのサイズがバインドされている場合に設定されているビューに適用されます。たとえば、親の View が画面サイズにバインドされている場合があります。子供もこのサイズに縛られますが、それほど大きくないかもしれません。したがって、親ビューは MeasureSpec を に設定し、AT_MOST0 と画面サイズの間のどこでもよいことを子に伝えます。子供は、指定された境界内に収まるように調整する必要があります。

特殊なケースでは、境界は重要ではありません。たとえば、ScrollView. の場合ScrollView、子ビューの高さは関係ありません。そのためUNSPECIFIED、必要なだけ背が高くてもよいことを子に伝えるビューを子に提供します。がそれらScrollViewの描画と配置を処理します。

于 2013-04-15T19:09:54.663 に答える
1

完全な洞察を得るには、まず記事を参照してください。サマーリーは -

  1. ビューの幅または高さが や などの特定の数値の場合、100pxビュー100dpの仕様モードはEXACTLY親コンテナーの測定モードに関係なく、ビューのサイズは特定の数値になります。

  2. ビューの幅または高さが を採用する場合、ビューMATCH_PARENTの仕様モードは親コンテナーの測定モードと一致します。しかし、specSize の値は異なります。親コンテナUNSPECIFIEDの SpecSize が の場合、ビューの specSize は 0 です。親コンテナの SpecSize がEXACTLYまたはの場合AT_MOST、ビューの specSize のサイズは、親コンテナの残りのスペースです。

  3. ビューの幅または高さが のWRAP_CONTENT場合、親コンテナの SpecMode がEXACTLYまたはの場合AT_MOST、ビューの測定モードは ですAT_MOST。親コンテナの specMode が の場合、UNSPECIFIEDビューの測定モードは ですUNSPECIFIED。ビューの測定サイズは、特に親コンテナの specMode が の場合、親コンテナの測定モードの影響も受けますUNSPECIFIED。SpecMode がEXACTLYまたはAT_MOSTの場合、view の specSize の最大サイズは、親コンテナーの残りのスペースを超えることはできません。親コンテナの specMode が の場合、UNSPECIFIEDビューのサイズは 0 です。 getChildMeasureSpec メソッドのロジックに従って、ビューと親コンテナの測定モード、およびビュー自身の layoutParams の関係を次のように要約できます。

ここに画像の説明を入力

于 2021-02-11T18:27:25.533 に答える