Androidでは、ウィジェットをレイアウトするとき、fill_parent
(API Level 8以降のmatch_parent
)とwrap_content
の違いは何ですか?
あなたが指すことができる文書はありますか?私はそれをよく理解することに興味があります。
どちらの属性も、ビューの(視覚的制御)水平方向または垂直方向のサイズに適用できます。寸法を明示的に指定するのではなく、内容または親レイアウトのサイズに基づいてビューまたはレイアウトのサイズを設定するために使用されます。
fill_parent
(APIレベル8以上では非推奨となり、MATCH_PARENT
に名称変更されました)
ウィジェットのレイアウトをfill_parentに設定すると、それが配置されているレイアウト要素内で使用可能な限り多くのスペースを占有するように拡張されます。これはWindowsフォームコントロールのドックスタイルをFill
に設定するのとほぼ同じです。
最上位のレイアウトまたはコントロールをfill_parentに設定すると、画面全体が表示されます。
wrap_content
ビューのサイズをwrap_contentに設定すると、ビューに含まれる値(または子コントロール)が含まれるのに十分なだけ拡張されます。テキストボックス(TextView)や画像(ImageView)のようなコントロールの場合、これは表示されているテキストまたは画像をラップします。レイアウト要素の場合は、子として追加されたコントロール/レイアウトに合わせてレイアウトのサイズが変更されます。
これは、WindowsフォームコントロールのAutosize
プロパティをTrueに設定するのとほぼ同じです。
オンラインドキュメント
Androidコードのドキュメントにいくつかの詳細があります ここ 。
fill_parent
(廃止予定)= match_parent
子ビューの境界は、親ビューの境界と一致するように拡大されます。
wrap_content
チャイルドビューの境界は、それ自体のコンテンツの周囲にぴったりと収まります。
より明確にするための画像がいくつかあります。緑と赤はTextViews
です。白は透けて見えるLinearLayout
です。
すべてのView
(TextView
、ImageView
、Button
など)は、ビューの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_content
とmatch_parent
を理解したら、次に学ぶことはlayout_weight
です。
垂直リニアレイアウト
<?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>
この答えの説明は、 マージンまたはパディング がないことを前提としています。しかし、たとえあったとしても、基本的な考え方は同じです。ビューの境界線/間隔は、マージンまたはパディングの値によって調整されるだけです。
fill_parent
は、要素の幅または高さを親要素、つまりコンテナと同じ大きさにします。
wrap_content
は、幅や高さをその中に要素を含めるために必要なだけ大きくします。
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