I have a RelativeLayout
like this:
<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>
The issue I'm running into is that I want the follow_button
to be below both the page_desc
as well as the page_image
. Sometimes the page_desc
content will have a height bigger than the size of the image, sometimes not. The issue is that if I set the follow_button
below either the image or the description, then the other one will get clipped. Is there an efficient / effective way to ensure that the image or page_desc
are always visible and above the button?
RelativeLayout is a view group that displays child views in relative positions. The position of each view can be specified as relative to sibling elements (such as to the left-of or below another view) or in positions relative to the parent RelativeLayout area (such as aligned to the bottom, left or center).
Yes, insofar as it will be deprecated when the v26 edition of the support libraries are released in production form, later in 2017.
Please take one Relative layout under your main layout . Set its height and width as fill parent and set its gravity as bottom and put any textview or any button you want in it.
A layout that lets you specify exact locations (x/y coordinates) of its children. Absolute layouts are less flexible and harder to maintain than other types of layouts without absolute positioning. XML attributes. See ViewGroup Attributes , View Attributes.
Here you go:
<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>
The answer here requires very little change. You had most of your layout correct, however, there is one option messing everything up. AlignParentXXXX will often take a "false" priority over your LayoutXXXX options. So, by setting your Button to AlignParentBottom, you are telling the RelativeLayout that the Button's size is not calculated in the parent layout size.
You may resolve the issue by simply removing AlignParent="true" from your Button. The result code is below and tested. This solution keeps in line with your desires, I believe.
<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>
I ran into many similar issues with AlignParent when WrapContent was on the Parent. Top and Bottoms positioning creates undesired behavior if not prepared for it. I find, in general, it is best to use only one or the other (if at all) and line up the rest above or below that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With