私はこのような相対的なレイアウトを持っています:
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/single_row"
Android:padding="12dip">
<ImageView
Android:id="@+id/page_image"
Android:layout_marginRight="6dip"
Android:layout_width="66dip"
Android:layout_height="66dip"
Android:layout_alignParentLeft="true"
Android:src="@drawable/no_photo" />
<TextView
Android:id="@+id/page_name"
style="@style/Pulse_content"
Android:layout_alignTop="@id/page_image"
Android:layout_toRightOf="@id/page_image"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
<TextView
Android:id="@+id/page_desc"
Android:layout_below="@id/page_name"
style="@style/Pulse_content"
Android:layout_alignLeft="@id/page_name"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Principal Consultant" />
<Button
Android:id="@+id/follow_button"
Android:layout_below="@id/author_image"
Android:layout_marginTop="15dip"
Android:layout_alignParentBottom="true"
Android:text="Follow"
style="@style/follow_button" />
</RelativeLayout>
私が直面している問題は、follow_buttonをpage_descとpage_imageの両方の下に配置することです。 page_descコンテンツの高さは画像のサイズよりも大きい場合がありますが、そうでない場合があります。問題は、画像または説明の下にfollow_buttonを設定すると、もう一方がクリップされることです。画像またはpage_descが常に表示され、ボタンの上にあることを保証する効率的/効果的な方法はありますか?
どうぞ:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:background="@drawable/single_row"
Android:padding="12dip">
<RelativeLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<ImageView
Android:id="@+id/page_image"
Android:layout_marginRight="6dip"
Android:layout_width="66dip"
Android:layout_height="66dip"
Android:layout_alignParentLeft="true"
Android:src="@drawable/no_photo" />
<TextView
Android:id="@+id/page_name"
style="@style/Pulse_content"
Android:layout_alignTop="@id/page_image"
Android:layout_toRightOf="@id/page_image"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
<TextView
Android:id="@+id/page_desc"
Android:layout_below="@id/page_name"
style="@style/Pulse_content"
Android:layout_alignLeft="@id/page_name"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Principal Consultant" />
</RelativeLayout>
<Button
Android:id="@+id/follow_button"
Android:layout_marginTop="15dip"
Android:text="Follow"
style="@style/follow_button" />
</LinearLayout>
ここでの答えは、ほとんど変更を必要としません。ほとんどのレイアウトは正しいものでしたが、すべてを台無しにするオプションが1つあります。 AlignParentXXXXは、多くの場合、LayoutXXXXオプションよりも「偽」の優先順位を取ります。したがって、ButtonをAlignParentBottomに設定することにより、親レイアウトサイズでボタンのサイズが計算されないことをRelativeLayoutに伝えています。
ButtonからAlignParent = "true"を削除するだけで問題を解決できます。結果コードは以下にあり、テスト済みです。この解決策はあなたの欲求に沿ったものであると信じています。
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/single_row"
Android:padding="12dip">
<ImageView
Android:id="@+id/page_image"
Android:layout_marginRight="6dip"
Android:layout_width="66dip"
Android:layout_height="66dip"
Android:layout_alignParentLeft="true"
Android:src="@drawable/no_photo" />
<TextView
Android:id="@+id/page_name"
style="@style/Pulse_content"
Android:layout_alignTop="@id/page_image"
Android:layout_toRightOf="@id/page_image"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
<TextView
Android:id="@+id/page_desc"
Android:layout_below="@id/page_name"
style="@style/Pulse_content"
Android:layout_alignLeft="@id/page_name"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Principal Consultant" />
<Button
Android:id="@+id/follow_button"
Android:layout_below="@id/author_image"
Android:layout_marginTop="15dip"
Android:text="Follow"
style="@style/follow_button" />
</RelativeLayout>
WrapContentが親にあるときに、AlignParentで多くの同様の問題に遭遇しました。上と下の配置は、準備ができていないと望ましくない動作を引き起こします。一般的に、どちらか一方のみを使用し(あるとしても)、その上または下に残りを並べることが最善であると思います。
RelativeLayoutではすべてが相互に依存しているため、どの順序で配置するかは関係ありませんが、作成する前に1つのビューにアクセスしようとしているかどうかは重要です。たとえば、Android:layout_below属性を使用することは、ボタンに必要なものではありません。他のビューをAndroid:layout_aboveボタンの上に設定すると、ビューは常にその上になります。
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/single_row"
Android:padding="12dip">
<Button
Android:id="@+id/follow_button"
Android:layout_marginTop="15dip"
Android:layout_alignParentBottom="true"
Android:text="Follow"
style="@style/follow_button" />
<ImageView
Android:id="@+id/page_image"
Android:layout_above="@id/follow_button"
Android:layout_marginRight="6dip"
Android:layout_width="66dip"
Android:layout_height="66dip"
Android:layout_alignParentLeft="true"
Android:src="@drawable/no_photo" />
<TextView
Android:id="@+id/page_name"
Android:layout_above="@id/follow_button"
style="@style/Pulse_content"
Android:layout_alignTop="@id/page_image"
Android:layout_toRightOf="@id/page_image"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
<TextView
Android:id="@+id/page_desc"
Android:layout_above="@id/follow_button"
Android:layout_below="@id/page_name"
style="@style/Pulse_content"
Android:layout_alignLeft="@id/page_name"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Principal Consultant" />
</RelativeLayout>