web-dev-qa-db-ja.com

fill_parentとwrap_contentの違いは何ですか?

Androidでは、ウィジェットをレイアウトするとき、fill_parent(API Level 8以降のmatch_parent)とwrap_contentの違いは何ですか?

あなたが指すことができる文書はありますか?私はそれをよく理解することに興味があります。

265
pupeno

どちらの属性も、ビューの(視覚的制御)水平方向または垂直方向のサイズに適用できます。寸法を明示的に指定するのではなく、内容または親レイアウトのサイズに基づいてビューまたはレイアウトのサイズを設定するために使用されます。

fill_parent(APIレベル8以上では非推奨となり、MATCH_PARENTに名称変更されました)

ウィジェットのレイアウトをfill_parentに設定すると、それが配置されているレイアウト要素内で使用可能な限り多くのスペースを占有するように拡張されます。これはWindowsフォームコントロールのドックスタイルをFillに設定するのとほぼ同じです。

最上位のレイアウトまたはコントロールをfill_parentに設定すると、画面全体が表示されます。

wrap_content

ビューのサイズをwrap_contentに設定すると、ビューに含まれる値(または子コントロール)が含まれるのに十分なだけ拡張されます。テキストボックス(TextView)や画像(ImageView)のようなコントロールの場合、これは表示されているテキストまたは画像をラップします。レイアウト要素の場合は、子として追加されたコントロール/レイアウトに合わせてレイアウトのサイズが変更されます。

これは、WindowsフォームコントロールのAutosizeプロパティをTrueに設定するのとほぼ同じです。

オンラインドキュメント

Androidコードのドキュメントにいくつかの詳細があります ここ

254
Reto Meier

fill_parent(廃止予定)= match_parent
子ビューの境界は、親ビューの境界と一致するように拡大されます。

wrap_content
チャイルドビューの境界は、それ自体のコンテンツの周囲にぴったりと収まります。

より明確にするための画像がいくつかあります。緑と赤はTextViewsです。白は透けて見えるLinearLayoutです。

enter image description here

すべてのViewTextViewImageViewButtonなど)は、ビューのwidthおよびheightを設定する必要があります。 xmlレイアウトファイルでは、これは次のようになります。

Android:layout_width="wrap_content"
Android:layout_height="match_parent"

幅と高さをmatch_parentまたはwrap_contentに設定する以外に、それらを何らかの絶対値に設定することもできます。

Android:layout_width="100dp"
Android:layout_height="200dp"

ただし、一般的にそれはそれほど良くはありません。異なるサイズのデバイスには柔軟性がないからです。 wrap_contentmatch_parentを理解したら、次に学ぶことはlayout_weightです。

また見なさい

上記の画像のXML

垂直リニアレイアウト

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
              Android:orientation="vertical"
              Android:layout_width="match_parent"
              Android:layout_height="match_parent">

    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:textAppearance="?android:attr/textAppearanceMedium"
        Android:text="width=wrap height=wrap"
        Android:background="#c5e1b0"/>

    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:textAppearance="?android:attr/textAppearanceMedium"
        Android:text="width=match height=wrap"
        Android:background="#f6c0c0"/>

    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:textAppearance="?android:attr/textAppearanceMedium"
        Android:text="width=match height=match"
        Android:background="#c5e1b0"/>

</LinearLayout>

水平リニアレイアウト

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
              Android:orientation="horizontal"
              Android:layout_width="match_parent"
              Android:layout_height="match_parent">

    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:textAppearance="?android:attr/textAppearanceMedium"
        Android:text="WrapWrap"
        Android:background="#c5e1b0"/>

    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:textAppearance="?android:attr/textAppearanceMedium"
        Android:text="WrapMatch"
        Android:background="#f6c0c0"/>

    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:textAppearance="?android:attr/textAppearanceMedium"
        Android:text="MatchMatch"
        Android:background="#c5e1b0"/>

</LinearLayout>

注意

この答えの説明は、 マージンまたはパディング がないことを前提としています。しかし、たとえあったとしても、基本的な考え方は同じです。ビューの境界線/間隔は、マージンまたはパディングの値によって調整されるだけです。

32
Suragch
  • fill_parentは、要素の幅または高さを親要素、つまりコンテナと同じ大きさにします。

  • wrap_contentは、幅や高さをその中に要素を含めるために必要なだけ大きくします。

AndroidはこちらDOC参照

9
Devrath

fill_parent

コンポーネントはfill_parentのレイアウトに配置されているので、できるだけスペース内でレイアウトユニットのメンバーを埋めるように拡張する必要があります。これは、Windowsコントロールのdockstyleプロパティと一致しています。トップセットのレイアウトまたはfill_parentへのコントロールはそれをスクリーン全体を占めるように強制します。

wrap_content

wrap_contentのサイズのビューを設定すると、すべてのコンテンツが表示されるようにビューが拡張されます。たとえば、TextViewおよびImageViewコントロールをwrap_contentに設定すると、内部のテキストと画像全体が表示されます。レイアウト要素は内容に従ってサイズを変更します。自動サイズ調整属性wrap_contentのサイズの表示を設定します。WindowsコントロールをTrueに設定するのとほぼ同じです。

詳細については、このリンクをチェックしてください: http://developer.Android.com/reference/Android/view/ViewGroup.LayoutParams.html

2
IntelliJ Amiya