Put buttons at bottom of screen with LinearLayout?

361,112

Solution 1

You need to ensure four things:

  • Your outside LinearLayout has layout_height="match_parent"
  • Your inside LinearLayout has layout_weight="1" and layout_height="0dp"
  • Your TextView has layout_weight="0"
  • You've set the gravity properly on your inner LinearLayout: android:gravity="center|bottom"

Notice that fill_parent does not mean "take up all available space". However, if you use layout_height="0dp" with layout_weight="1", then a view will take up all available space (Can't get proper layout with "fill_parent").

Here is some code I quickly wrote up that uses two LinearLayouts in a similar fashion to your code.

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

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/cow"
        android:layout_weight="0"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:gravity="center|bottom"
        android:orientation="vertical" >

        <Button
            android:id="@+id/button1"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="145dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|center"
            android:text="1" />

        <Button
            android:id="@+id/button2"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="145dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|center"
            android:text="2" />

        <Button
            android:id="@+id/button3"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="145dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|center"
            android:text="3" />
    </LinearLayout>

</LinearLayout>

The result looks like similar to this:

enter image description here

Solution 2

You can use a RelativeLayout and align it to the bottom with android:layout_alignParentBottom="true"

Solution 3

Create Relative layout and inside that layout create your button with this line

android:layout_alignParentBottom="true"

Solution 4

You can do this by taking a Frame layout as parent Layout and then put linear layout inside it. Here is a example:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
 >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:textSize="16sp"/>


<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"      
    android:textSize="16sp"
    />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:textSize="16sp"/>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
     android:textSize="16sp"/>




</LinearLayout>

<Button
    android:id="@+id/button2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:layout_gravity="bottom"
    />
 </FrameLayout>

Solution 5

first create file name it as footer.xml put this code inside it.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="78dp"
    android:layout_gravity="bottom"
    android:gravity="bottom"
 android:layout_weight=".15"
    android:orientation="horizontal"
    android:background="@drawable/actionbar_dark_background_tile" >
    <ImageView
        android:id="@+id/lborder"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/overlay" />
    <ImageView
        android:id="@+id/unknown"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/notcolor" />
    <ImageView
        android:id="@+id/open"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/openit"
        />
    <ImageView
        android:id="@+id/color"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/colored" />
        <ImageView
        android:id="@+id/rborder"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/frames"
        android:layout_weight=".14" />


</LinearLayout>  

then create header.xml and put this code inside it.:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="@dimen/action_bar_height"
    android:layout_gravity="top"
    android:baselineAligned="true"
    android:orientation="horizontal"
    android:background="@drawable/actionbar_dark_background_tile" >
    <ImageView
        android:id="@+id/contact"
        android:layout_width="37dp"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_weight=".18"
        android:scaleType="fitCenter"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/logo"/>

    <ImageView
        android:id="@+id/share"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/share" />

    <ImageView
        android:id="@+id/save"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/save" />

    <ImageView
        android:id="@+id/set"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/set" />

    <ImageView
        android:id="@+id/fix"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/light" />

    <ImageView
        android:id="@+id/rotate"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/ic_menu_rotate" />

    <ImageView
        android:id="@+id/stock"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/stock" />

</LinearLayout>

and then in your main_activity.xml and put this code inside it :-

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="fill_parent"
tools:context=".MainActivity"
android:id="@+id/relt"
android:background="@drawable/background" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="78dp"
    android:id="@+id/down"
    android:layout_alignParentBottom="true" >

    <include
        android:layout_width="fill_parent"
        android:layout_height="78dp"
        layout="@layout/footer" >
    </include>
</LinearLayout>
<ImageView
    android:id="@+id/view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/down"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/inc"
   >  
    </ImageView> 
    <include layout="@layout/header"
        android:id="@+id/inc"
        android:layout_width="fill_parent"
        android:layout_height="50dp"></include> 

happy coding :)

Share:
361,112

Related videos on Youtube

thedeepfield
Author by

thedeepfield

Ruby/RoR, Python/Django, JAVA/Android.

Updated on October 17, 2021

Comments

  • thedeepfield
    thedeepfield over 2 years

    I have the following code, how do I make it so that the 3 buttons are at the bottom?

        <TextView
            android:id="@+id/textView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="60dp"
            android:gravity="center"
            android:text="@string/observer"
            android:textAppearance="?android:attr/textAppearanceLarge"
            tools:context=".asdf"
            android:weight="1" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
    
            <Button
                android:id="@+id/button1"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="145dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal|center"
                android:text="1" />
    
            <Button
                android:id="@+id/button2"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="145dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal|center"
                android:text="2" />
    
            <Button
                android:id="@+id/button3"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="145dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal|center"
                android:text="3" />
        </LinearLayout>
    

    • Nirvana Tikku
      Nirvana Tikku over 11 years
      what's this view wrapped in? a frame layout? relative layout?
    • Brian Attwell
      Brian Attwell over 11 years
      Your code contains a typo. By android:weight="1" you probably meant android:layout_weight="1". This isn't your problem though.
    • Krupa Patel
      Krupa Patel almost 10 years
    • Alex
      Alex over 4 years
      It might be easier to use the space layout found in the toolbox. You can place it on top of the existing layout above the buttons and size it and it will push them to the bottom.
    • Windgate
      Windgate almost 3 years
      You can find a lot of different solutions in this post stackoverflow.com/questions/3989883/…
  • thedeepfield
    thedeepfield over 11 years
    adding anroid:layout_weight="1" does not move the linear layout (and buttons) down to the bottom...
  • thedeepfield
    thedeepfield over 11 years
    is it not possible using linear layout?
  • Ahmad
    Ahmad over 11 years
    It is. Like @AND_DEV already said: Use layout_weight="1". With this your LinearLayout will occupy the height left on the screen; now you can set the gravity of your Buttons to bottom.
  • Brian Attwell
    Brian Attwell over 11 years
    @AND_DEV, you forgot to set android:gravity. Right now, the buttons will still be at the top, even though the LinearLayout that contains them fills the entire bottom area.
  • AAnkit
    AAnkit over 11 years
    No , Buttons will be in LL2 and that will be in bottom area. Can set Gravity if OP wants Button in exact bottom line. I was just giving a rough Idea, so he can do it according to his requirement.
  • Martin Konecny
    Martin Konecny about 10 years
    Does the order matter? I noticed you put the footer as the first element, and the header as the last.
  • Kosh
    Kosh about 10 years
    @MartinKonecny no it does't matter because RelativeLayout has its own attributes so you can control where to other layouts fit inside of it. like : layout_below , etc.
  • G_V
    G_V almost 9 years
    Relativelayouts are hard to read, almost never do what you want and are generally awful to maintain. I'd take the performance hit of 30 linearlayouts over 1 relativelayout any day of the week, simply because it saves hours of frustrating fiddling.
  • Thomas Mondel
    Thomas Mondel almost 9 years
    additionally adding android:layout_centerHorizontal="true" to also center it horizontally makes this a great solution.
  • lisa
    lisa about 8 years
    Voted up just for the note on how to get a view to fill up all available space! Thank you, great answer!
  • Yousha Aleayoub
    Yousha Aleayoub over 7 years
    Those Lint warnings...!
  • zackygaurav
    zackygaurav over 7 years
    Great Trick. Thanks
  • greenoldman
    greenoldman over 7 years
    Do I read you correctly, that you are using LL1 element as spacer, so everything next will be at the bottom? Pretty neat trick.
  • Sushant Gosavi
    Sushant Gosavi about 7 years
    This is not best solution becoz after that you cant set view at the center of remaining screen .........................so best solution award goes to this answer -stackoverflow.com/a/26140793/4741746
  • Rahat Zaman
    Rahat Zaman over 6 years
    Can you please describe the significance of layout_weight="0" or what it actually does?
  • Gopi.cs
    Gopi.cs almost 5 years
    @Ahmed i think the question asked is very clear as it is for LinearLayout, But answered for RelativityLayout and Brian Attwell answered clearly with android:gravity="center|bottom" !
  • Ahmad
    Ahmad almost 5 years
    @Gopi.cs I'm really not sure why you're commenting on an answer that I gave more than 6(!) years ago. It's 2019, just use a ConstraintLayout.
  • Windgate
    Windgate almost 3 years
    android:layout_alignParentBottom is not available as propertie, is it deprecated?
  • Windgate
    Windgate almost 3 years
    but why I don't have that property available in most of my elements and layouts?
  • Ahmad
    Ahmad almost 3 years
    @Windgate make sure that your parent layout is also a RelativeLayout
  • Koen van der Marel
    Koen van der Marel over 2 years
    Such a simple solution, this solved so many issues. Cheers.