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?

Rohith Nandakumar
fuente

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.

lblasa
fuente
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.

JaydeepW
fuente
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>
Rohith Nandakumar
fuente
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í

Jakob
fuente
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" 
Jorgesys
fuente
5
android:layout_gravity="bottom"
superarts.org
fuente
por qué usamos la gravedad, para qué es específico
blackHawk
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
Rahul
fuente
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>

ximoed
fuente
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
Pawananjani Kumar
fuente
-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?

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