web-dev-qa-db-fra.com

Android: aligner le parent en bas + la marge en bas

J'ai utilisé une disposition relative et je veux définir le bouton en bas de l'écran. Toutefois, tout se met en bas et j'aimerais avoir une marge afin qu'il y ait un peu d'espace entre la fin de l'écran/voir et le bouton. Cependant, quoi que je fasse, la marge du bouton ne fait rien sur la version 2.1+ pour une raison quelconque. La mise en page relative contient un arrière-plan donc je ne peux que la marge à ce sujet.

Quelqu'un sait un correctif pour cela?

<?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:layout_marginBottom="0dp"
Android:background="@drawable/background" >

    <Button
        Android:id="@+id/confirm_mobile_button_next"
        Android:layout_width="fill_parent"
        Android:layout_height="40dip"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentLeft="false"
        Android:layout_centerHorizontal="false"
        Android:layout_centerInParent="false"
        Android:layout_margin="15dp"
        Android:background="@drawable/button_shape_selector"
        Android:paddingLeft="10dip"
        Android:paddingRight="10dip"
        Android:text="@string/confirm_mobile_no_continue"
        Android:textColor="@color/white"
        Android:textStyle="bold" />

</RelativeLayout>
64
Jacob

Vous pouvez simplement ajouter un remplissage à RelativeLayout au lieu d’une marge au Bouton, par exemple. Android:paddingBottom="15dp".

En général, je teste toujours ma mise en page dans l'aperçu d'Exclipse à l'aide du paramètre API Niveau 8. Cela donne des résultats assez précis pour la plupart des appareils, y compris ICS et JB.

67
André

Vous pouvez également placer un View aligné sur le bas du RelativeLayout et définir sa hauteur sur la marge inférieure à utiliser (ou simplement spécifier une valeur pour layout_marginBottom) ainsi:

 <RelativeLayout
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"        
    > 
    <ImageView
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:src="@drawable/some_image"
        Android:adjustViewBounds="true"

         />
    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="Some Overlay"
        Android:padding="3dip"
        Android:gravity="center_vertical|center_horizontal"

        Android:layout_above="@+id/empty_view"
        Android:layout_marginBottom="35dip"
        />
    <View 
        Android:id = "@+id/empty_view"
        Android:layout_height = "30dip"
        Android:layout_width = "match_parent"
        Android:visibility="invisible"
        Android:layout_alignParentBottom="true"
        />

    </RelativeLayout>

Cet exemple remplit le RelativeLayout avec le ImageView et positionne un TextView sur le ImageView.

30
ajacian81

Yu peut utiliser l'attribut translateY

translateY="-16dp"

Code final

<?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:layout_marginBottom="0dp"
    Android:background="@drawable/background">

    <Button
        Android:id="@+id/confirm_mobile_button_next"
        Android:layout_width="fill_parent"
        Android:layout_height="40dip"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentLeft="false"
        Android:layout_centerHorizontal="false"
        Android:layout_centerInParent="false"
        Android:layout_margin="15dp"
        Android:background="@drawable/button_shape_selector"
        Android:paddingLeft="10dip"
        Android:paddingRight="10dip"
        Android:text="@string/confirm_mobile_no_continue"
        Android:textColor="@color/white"
        Android:textStyle="bold"
        Android:translateY="-16dp" />

</RelativeLayout>
17
Shubham

seule la solution de travail suggérée par @franny zhao est présentée ci-dessous.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">

    <FrameLayout
        Android:id="@+id/fl_layout"
        Android:layout_alignParentBottom="true"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content">
        <TextView
            Android:id="@+id/tv_layout"
            Android:text="hello world"
            Android:layout_marginBottom="50dp"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />
    </FrameLayout>
</RelativeLayout>

Si vous ajoutez un remplissage à la vue alignée du bas, comme suggéré par d'autres, l'arrière-plan de la vue sera également étendu. Si vous avez un fond coloré, la vue sera comme collée vers le bas. Le rembourrage et la marge sont complètement différents, le rembourrage fait partie de la vue, mais la marge laisse un espace entre les vues.

3
Satheesh

Je pense que le meilleur moyen est de définir:

<...
Android:layout_alignParentBottom="true" />

puis dans Java code derrière:

Button confirm_mobile_button_next = (Button)findViewById(R.id.confirm_mobile_button_next)
confirm_mobile_button_next.setTransitionY(-THE_VALUE) or setTransitionX(-THE_VALUE)
3
sadegh saati

Je pense que le meilleur moyen est de définir Android: layout_alignParentBottom en XML puis dans Java derrière:

Button confirm_mobile_button_next = (Button)findViewById(R.id.confirm_mobile_button_next)

et

confirm_mobile_button_next.setTransitionY(-THE_VALUE) or setTransitionX(-THE_VALUE)
2
sadegh saati

Étant donné que je suis tombé sur cette question et que je n'ai trouvé aucune réponse à ma situation, j'ai commencé à réfléchir pendant une demi-seconde et j'ai résolu le problème en définissant une marge négative sur la vue à l'intérieur de l'exemple RelativeLayout:

<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
    <ImageView
    Android:layout_width="48dp"
    Android:layout_height="48dp"
        Android:layout_marginTop="-8dp"
        Android:layout_marginStart="-8dp">
</RelativeLayout>

Cela devrait être utile à certaines personnes.

1
Mathijs Segers

Vous pouvez utiliser un groupe de vues (FrameLayout ou LinearLayout, par exemple) pour envelopper la vue. Définissez alignParentBottom dans le ViewGroup extérieur, puis marginBottom peut fonctionner dans la Vue interne.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">

    <FrameLayout
        Android:id="@+id/fl_layout"
        Android:layout_alignParentBottom="true"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content">
        <TextView
            Android:id="@+id/tv_layout"
            Android:text="hello world"
            Android:layout_marginBottom="50dp"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />
    </FrameLayout>
</RelativeLayout>
1
franny zhao