Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: put element below another element and align at bottom of screen

I am trying to define a layout where an ImageView is aligned at the bottom of the screen and also under a GridView, to avoid overlapping.

This however results in the ImageView being set just under the GridView but not aligned with the bottom of the screen.

Can this be solved using a different kind of Layout?

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/background"
    android:orientation="vertical">

    <RelativeLayout 
        android:id="@+id/gs_top_text_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:paddingBottom="30dp">

        <RelativeLayout 
            android:id="@+id/gs_top_sub_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:paddingBottom="30dp">

            <TextView
                android:id="@+id/text_l"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"/>

            <TextView
                android:id="@+id/text_t"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"/>

        </RelativeLayout>

        <RelativeLayout 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/gs_top_sub_container"
            android:layout_centerHorizontal="true">

            <TextView
                android:id="@+id/text1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

            <TextView
                android:id="@+id/text2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/text1"/>

        </RelativeLayout>



    </RelativeLayout>



    <GridView
        android:id="@+id/gs_grid_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/gs_top_text_container"
        android:descendantFocusability="blocksDescendants"
        android:horizontalSpacing="2dp"
        android:verticalSpacing="2dp"
        android:numColumns="3"
        android:gravity="center"
        android:paddingBottom="10dp"
        android:paddingTop="10dp" />


    <ImageView
        android:id="@+id/gs_bottom_logo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/gs_grid_view"
        android:layout_alignParentBottom="true"
        android:adjustViewBounds="true"
        android:maxWidth="200dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"/>

</RelativeLayout>
like image 461
liarspocker Avatar asked Jun 02 '14 20:06

liarspocker


People also ask

How do I fix the bottom layout on my Android?

You can set the layout_height="0dp" of your header, footer and ScrollView and define a layout_weight . Just play around with the values until you find out which works best. The resulting heights of header and footer would dynamically change with the screensize.

What is a relative layout?

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).

How do I change the position of text in Android Studio?

Use RelativeLayout instead of LinearLayout . There are also many other layouts you can try. Check here for the other type of available layouts. RelativeLayout lets child views specify their position relative to the parent view or to each other (specified by ID).


2 Answers

This is how I would do that:

1 - Put the ImageView on the Bottom
2 - Put the GridView ABOVE it.

<!-- First anchor this View to the bottom --> <ImageView     android:id="@+id/gs_bottom_logo"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:layout_alignParentBottom="true"     android:adjustViewBounds="true"     android:maxWidth="200dp"     android:paddingLeft="20dp"     android:paddingRight="20dp" /> <!-- Then put this View ABOVE the ImageView --> <GridView     android:id="@+id/gs_grid_view"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_below="@id/gs_top_text_container"     android:layout_above="@id/gs_bottom_logo"     android:descendantFocusability="blocksDescendants"     android:horizontalSpacing="2dp"     android:verticalSpacing="2dp"     android:numColumns="3"     android:gravity="center"     android:paddingBottom="10dp"     android:paddingTop="10dp" /> 

This way I used the relativity of elements in a RelativeLayout

[EDIT]

Just for fun... I optimized your WHOLE LAYOUT.
Please note how the same design is achieved by using many layouts less.

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout     xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:paddingBottom="@dimen/activity_vertical_margin"     android:paddingLeft="@dimen/activity_horizontal_margin"     android:paddingRight="@dimen/activity_horizontal_margin"     android:paddingTop="@dimen/activity_vertical_margin"     android:background="@drawable/background"     >     <TextView         android:id="@+id/text_l"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_alignParentLeft="true"         android:layout_alignParentTop="true"         android:paddingBottom="30dp"     />     <TextView         android:id="@+id/text_t"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_alignParentRight="true"         android:layout_alignParentTop="true"         android:paddingBottom="30dp"     />     <!--         This container is (unfortunately) still needed, to make these two         textViews horizontally centered... :(     -->     <RelativeLayout         android:id="@+id/rlCentering"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_below="@id/text_l"         android:layout_centerHorizontal="true"         android:paddingBottom="30dp"         >         <TextView             android:id="@+id/text1"             android:layout_width="wrap_content"             android:layout_height="wrap_content"         />         <TextView             android:id="@+id/text2"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_toRightOf="@id/text1"         />     </RelativeLayout>      <!-- First, anchor this View to the bottom -->     <ImageView         android:id="@+id/gs_bottom_logo"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:layout_alignParentBottom="true"         android:adjustViewBounds="true"         android:maxWidth="200dp"         android:paddingLeft="20dp"         android:paddingRight="20dp"     />     <!-- Then put this View ABOVE the ImageView -->     <GridView         android:id="@+id/gs_grid_view"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_below="@id/rlCentering"         android:layout_above="@id/gs_bottom_logo"         android:descendantFocusability="blocksDescendants"         android:horizontalSpacing="2dp"         android:verticalSpacing="2dp"         android:numColumns="3"         android:gravity="center"         android:paddingBottom="10dp"         android:paddingTop="10dp"     /> </RelativeLayout> 

And this is what I got in the Graphical Editor (I put some images I had and some texts to identify the TextViews):

enter image description here

like image 95
Phantômaxx Avatar answered Sep 27 '22 15:09

Phantômaxx


Solved it by putting the ImageView in a RelativeLayout, setting the layout_below item in the RelativeLayout and the alignParentBottom item of ImageView:

<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/gs_grid_view">
<ImageView
    android:id="@+id/gs_bottom_logo"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:adjustViewBounds="true"
    android:maxWidth="200dp"
    android:paddingLeft="20dp"
    android:paddingRight="20dp"/>
</RelativeLayout>
like image 30
liarspocker Avatar answered Sep 27 '22 15:09

liarspocker