Search code examples
androidandroid-relativelayoutstretched

Button in Relativelayout was stretched


Basically I want to add a textView , spinner and a button in this relativelayout. Looks like:

---- TextView----

-----spinner----

------------button--

The problem is that button at bottom right side is stretched, the button height stands all the rest of space.

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/surveyLayout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent">
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="20dp"
    android:layout_marginTop="20dp"
    android:layout_alignParentTop="true"
    android:text="@string/selectSurvey"
    android:textColor="@android:color/darker_gray"
    android:id="@+id/hasSurveyLabel"
    />
<Spinner
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:id="@+id/surveySpinner"
    android:layout_below="@+id/hasSurveyLabel"
    />
<Button
    android:layout_width="wrap_content"
    android:layout_height="30dp"
    android:id="@+id/startButton"
    android:text="@string/start"
    **android:layout_below="@+id/surveySpinner"**
    android:layout_alignParentRight="true"
    android:layout_alignParentBottom="true"
    android:paddingTop="10dp"
    android:paddingLeft="30dp"
    android:paddingRight="30dp"
    />

Looks like it is because of layout_below, when we use layout_below, the button below spinner, it has to be just below it, no space unless you define it.
How can we solve this problem?
What I am expecting is, put button below spinner, and at the bottom of screen.
I have been struggling on this for days, any help? Thanks.


Solution

  • I would remove the reference to the spinner and just place it at the bottom right. I have a similar screen layout and the following button settings work for me.

    <Button
       android:id  ="@+id/testButton"
       android:text="Testing"
       android:layout_width ="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true"
       android:layout_alignParentRight ="true"  /> 
    

    Alternatively what I've seen done it to wrap in a LinearLayout that is placed at the bottom. But the layering seems unneeded to me. Hope this helps!

       <LinearLayout
          android:orientation  ="horizontal"
          android:layout_width ="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentBottom="true"
          android:layout_alignParentRight ="true">
    
          <Button
             android:id  ="@+id/testButton"
             android:text="Testing"
             android:layout_width ="wrap_content"
             android:layout_height="wrap_content"  />
    
       </LinearLayout>