web-dev-qa-db-fra.com

Android: placez l'élément au-dessous d'un autre élément et alignez-le en bas de l'écran

J'essaie de définir une mise en page où un ImageView est aligné en bas de l'écran et également sous un GridView, pour éviter le chevauchement.

Cependant, cela entraîne la définition de ImageView juste en dessous de GridView mais pas en alignement avec le bas de l'écran.

Cela peut-il être résolu en utilisant un autre type de mise en page?

<?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>
23
liarspocker

Voici comment je ferais cela:

1 - Placez l'ImageView en bas
2 - Placez le GridView AU-DESSUS.

<!-- 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"
/>

De cette façon, j'ai utilisé le relativité des éléments dans un RelativeLayout

[MODIFIER]

Juste pour le plaisir ... J'ai optimisé votre mise en page entière.
Veuillez noter comment même modèle est obtenu en utilisant beaucoup de mises en page en moins.

<?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>

Et voici ce que j'ai obtenu dans l'éditeur graphique (j'ai mis quelques images que j'avais et quelques textes pour identifier les TextViews):

enter image description here

23
Fantômas

Résolu en mettant ImageView dans un RelativeLayout, définissant le layout_below élément dans RelativeLayout et alignParentBottom élément d'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>
3
liarspocker