Put buttons at bottom of screen with LinearLayout?
Solution 1
You need to ensure four things:
- Your outside
LinearLayout
haslayout_height="match_parent"
- Your inside
LinearLayout
haslayout_weight="1"
andlayout_height="0dp"
- Your
TextView
haslayout_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:
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 :)
Related videos on Youtube
Comments
-
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 over 11 yearswhat's this view wrapped in? a frame layout? relative layout?
-
Brian Attwell over 11 yearsYour code contains a typo. By
android:weight="1"
you probably meantandroid:layout_weight="1"
. This isn't your problem though. -
Krupa Patel almost 10 yearspossible duplicate of How to align views at the bottom of the screen?
-
Alex over 4 yearsIt 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 almost 3 yearsYou can find a lot of different solutions in this post stackoverflow.com/questions/3989883/…
-
-
thedeepfield over 11 yearsadding anroid:layout_weight="1" does not move the linear layout (and buttons) down to the bottom...
-
thedeepfield over 11 yearsis it not possible using linear layout?
-
Ahmad over 11 yearsIt 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 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 over 11 yearsNo , 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 about 10 yearsDoes the order matter? I noticed you put the footer as the first element, and the header as the last.
-
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 almost 9 yearsRelativelayouts 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 almost 9 yearsadditionally adding
android:layout_centerHorizontal="true"
to also center it horizontally makes this a great solution. -
lisa about 8 yearsVoted up just for the note on how to get a view to fill up all available space! Thank you, great answer!
-
Yousha Aleayoub over 7 yearsThose Lint warnings...!
-
zackygaurav over 7 yearsGreat Trick. Thanks
-
greenoldman over 7 yearsDo 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 about 7 yearsThis 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 over 6 yearsCan you please describe the significance of
layout_weight="0"
or what it actually does? -
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 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 almost 3 yearsandroid:layout_alignParentBottom is not available as propertie, is it deprecated?
-
Windgate almost 3 yearsbut why I don't have that property available in most of my elements and layouts?
-
Ahmad almost 3 years@Windgate make sure that your parent layout is also a
RelativeLayout
-
Koen van der Marel over 2 yearsSuch a simple solution, this solved so many issues. Cheers.