Android: ¿Alinear el botón a la parte inferior derecha de la pantalla usando FrameLayout?


106

Estoy intentando colocar los controles de zoom del mapa en la esquina inferior derecha de la pantalla. Podría hacerlo con RelativeLayout usando ambos alignParentBottom="true"y alignParentRight="true", pero con Framelayout no encontré ninguno de esos atributos. ¿Cómo lo alineo con la parte inferior derecha de la pantalla?

Respuestas:


252

De hecho, es posible, a pesar de lo que se dice en otras respuestas. Si tiene un FrameLayoutelemento secundario y desea colocarlo en la parte inferior, puede usar android:layout_gravity="bottom"y eso alineará a ese elemento secundario con la parte inferior del archivo FrameLayout.

Sé que funciona porque lo estoy usando. Sé que es tarde, pero podría ser útil para otros, ya que se ubica en las primeras posiciones en Google.


7
Hola, byte1918, si consideras que esta no es la respuesta correcta para la pregunta, eres más que bienvenido, y creo que sería útil para todos, si publicas la solución correcta. O explique al menos qué hace que esta sea una respuesta incorrecta. Gracias.
lblasa

33
Para alinear la parte inferior derecha, puede usar Android: layout_gravity = "bottom | right"
Marcin Raczkowski

1
si no se refleja inmediatamente en la vista previa, intente configurarlo desde la pestaña de diseño. normalmente funciona,
yUdoDis

Lo intenté con Textview y no funciona
The Only Smart Boy

51

También me encontré con esta situación y descubrí cómo hacerlo usando FrameLayout. El siguiente resultado es producido por el código que se proporciona a continuación.

Algún texto alineado en la parte inferior derecha que se muestra sobre una imagen usando FrameLayout.

              <FrameLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >

                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:src="@drawable/contactbook_icon"
                        android:layout_gravity="center" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="140"
                        android:textSize="12dp"
                        android:textColor="#FFFFFF"
                        android:layout_gravity="bottom|right"
                        android:layout_margin="15dp" />
                </FrameLayout>

Cambie el valor del margen para ajustar la posición del texto sobre la imagen. Eliminar el margen puede hacer que el texto se pierda de vista a veces.


la mejor respuesta ... gracias, resuelto un misterio de larga data.
YvesLeBorg

38

Se puede lograr usando RelativeLayout

<RelativeLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

   <ImageView 
      android:src="@drawable/icon"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_alignParentBottom="true" />

</RelativeLayout>

1
Esto no funciona, si se usa wrap_contenten RelativeLayout. Porque de todos modos RelativeLayout escalado en toda la pantalla.
Yura Shinkarev

15

La configuración android:layout_gravity="bottom|right"funcionó para mí


9

Dos formas de hacer esto:

1) Uso de un diseño de marco

android:layout_gravity="bottom|right"

2) Usando un diseño relativo

android:layout_alignParentRight="true"
android:layout_alignParentBottom="true" 


3

Si quieres probar con el código java. Aqui tienes -

    final LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, 
                                             LayoutParams.WRAP_CONTENT);
    yourView.setLayoutParams(params);
    params.gravity = Gravity.BOTTOM; // set gravity

justo lo que quiero. Pequeña adición: LayoutParams debe ser de FrameLayout.LayoutParams. Y si lo desea, utilice la esquina inferior derecha: params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
SajithK

2

puede agregar un TextView invisible al FrameLayout.

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:visibility="invisible"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">
        <Button
            android:id="@+id/daily_delete_btn"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:text="DELETE"
            android:layout_gravity="center"/>
        <Button
            android:id="@+id/daily_save_btn"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:text="SAVE"
            android:layout_gravity="center"/>
    </LinearLayout>


0

Hay muchos métodos para hacer esto usando el widget de restricción de la página activity.xml de Android Studio.

Los dos métodos más comunes son:

  1. Seleccione la vista de su botón y ajuste sus márgenes.
  2. Ve a "Todos los atributos", luego a "layout_constraints", luego selecciona
    • layout_constraintBottom_toBottomOf_parent
    • layout_constraintRight_toRightOf_parent

-3

No puede hacerlo con FrameLayout.

De la especificación:

http://developer.android.com/reference/android/widget/FrameLayout.html

"FrameLayout está diseñado para bloquear un área en la pantalla para mostrar un solo elemento. Puede agregar varios niños a un FrameLayout, pero todos los niños están vinculados a la parte superior izquierda de la pantalla".

¿Por qué no utilizar RelativeLayout?


Quiero que se muestre una lista en el lado izquierdo, superpuesta al mapa. Oh, eso es posible con RelativeLayout, ¿no? OK gracias.
Rohith Nandakumar

1
"pero todos los niños están en la parte superior izquierda de la pantalla", no necesariamente en la parte superior de la pantalla, puede alinearla a la derecha, abajo, etc.
Rohith Nandakumar

Sí, eso es posible con RelativeLayout. Puede diseñar vistas una encima de la otra.
Juhani

Esto es en realidad medio correcto. Lo que OP está pidiendo se puede lograr, pero con una vista limitada, por supuesto, como mencionó. ¡Pero decir que esto 'no se puede lograr' sería incorrecto!
sud007
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.