Android: Alinear fondo principal + margen inferior

He utilizado un diseño relativo y quiero configurar el botón en la parte inferior de la pantalla, Sin embargo, esto pone todo el abajo a la parte inferior y me gustaría tener un margen por lo que hay algún espacio entre el final de la pantalla / Vista y el botón. Sin embargo lo que hago el margen del botón no hace nada en 2.1 + por alguna razón. El diseño relativo contiene un fondo, así que no puedo pero el margen en eso.

Alguien sabe una solución para esto?

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

Simplemente puede agregar un relleno a RelativeLayout en lugar de un margen al botón, por ejemplo android:paddingBottom="15dp" .

En general, siempre estoy probando mi diseño en la vista previa de Exclipse utilizando la configuración de Nivel de API 8. Esto da resultados bastante precisos para la mayoría de los dispositivos, incluyendo ICS y JB.

La otra cosa que puedes hacer es poner una View que esté alineada a la parte inferior de RelativeLayout y establecer su altura al margen inferior que deseas usar (o simplemente especificar un valor para layout_marginBottom ) así:

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

Este ejemplo rellena RelativeLayout con ImageView y posiciona un TextView sobre ImageView .

Yu puede usar el atributo translateY

 translateY="-16dp" 

Código 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> 

Creo que la mejor manera es establecer android: layout_alignParentBottom en XML y luego en código java detrás:

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

y

 confirm_mobile_button_next.setTransitionY(-THE_VALUE) or setTransitionX(-THE_VALUE) 

Desde que me topé con este tema y no vi respuestas adecuadas a mi situación empecé a pensar durante medio segundo y lo resolví estableciendo un margen negativo en la vista dentro del ejemplo de 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> 

Esto debería ser útil para algunas personas.

Creo que la mejor manera es establecer:

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

Luego en código java detrás:

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

Puede utilizar un ViewGroup (por ejemplo, FrameLayout o LinearLayout) para ajustar la vista. Establezca alignParentBottom en el ViewGroup exterior, entonces marginBottom puede trabajar en la vista interna.

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

Sólo solución de trabajo sugerido por @franny zhao está a continuación.

 <?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 agrega relleno a la vista inferior alineada como lo sugieren otros, el fondo de vista también se extenderá. Si tiene un fondo de color, la vista se verá como si estuviera pegada al fondo. El acolchado y el margen son completamente diferentes, el relleno es parte de la vista, pero el margen deja espacio entre las vistas.

Intente de esta manera:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="17dp" android:text="Button" /> 

Aquí hay otra alternativa. Si desea establecer el margen del niño en lugar del relleno de los padres, debe establecer el valor de android:layout_marginTop al doble del margen deseado y, a continuación, establecer el android:layout_centerVertical a true. Margen superior se le da el doble del valor deseado para compensar el margen inferior. De esta forma, tendrá un margen superior e inferior igual al de la vista secundaria.

 <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_centerVertical="true" android:layout_centerInParent="false" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_marginTop="30dp" 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" /> 

Te dará el mismo resultado.

  • Agregar dinámicamente vista a la parte inferior de RelativeLayout
  • ¿Cómo alinear la parte superior de una vista con el centro vertical de otra vista?
  • Android TextView no se puede seleccionar en CoordinatorLayout? (TextView no admite la selección de texto.
  • RelativeLayout centro vertical
  • ¿Cómo crear un RelativeLayout programáticamente con dos botones uno encima del otro?
  • ¿Cómo obtengo el siguiente resultado utilizando RelativeLayout?
  • Cambio de color de TextView en el enfoque / presione
  • Alinear los controles uno junto al otro en un diseño relativo
  • TextViews en la parte superior e inferior, el espacio restante lleno de ListView
  • Alinear el botón a la parte inferior de la pantalla
  • Diseño relativo alignParentLeft vs alignParentStart
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.