Android: botão Alinhar na parte inferior direita da tela usando FrameLayout?

106

Estou tentando colocar os controles de zoom do mapa no canto inferior direito da tela. Eu poderia fazer isso com RelativeLayout usando ambos alignParentBottom="true"e alignParentRight="true", mas com Framelayout não encontrei nenhum desses atributos. Como faço para alinhá-lo com o canto inferior direito da tela?

Rohith Nandakumar
fonte

Respostas:

252

Na verdade é possível, apesar do que está sendo dito nas outras respostas. Se você tem um FrameLayoute deseja posicionar um item filho na parte inferior, você pode usar android:layout_gravity="bottom"e isso vai alinhar esse filho na parte inferior do FrameLayout.

Eu sei que funciona porque estou usando. Eu sei que está atrasado, mas pode ser útil para outras pessoas, uma vez que está classificado nas primeiras posições no google

lblasa
fonte
7
Olá, byte1918, se você acha que esta não é a resposta certa para a pergunta, você é mais do que bem-vindo - e acho que seria útil para todos - se você postar a solução certa. Ou explique pelo menos o que torna esta resposta errada. Obrigado.
lblasa
33
Para alinhar o canto inferior direito, você pode usar o Android: layout_gravity = "bottom | right"
Marcin Raczkowski
1
se não refletir imediatamente na visualização, tente configurá-lo na guia de design. geralmente funciona,
yUdoDis
Eu tentei isso com o Textview e não está funcionando
The Only Smart Boy
51

Também me deparei com essa situação e descobri como fazer isso usando o FrameLayout. A saída a seguir é produzida pelo código fornecido a seguir.

Algum texto alinhado na parte inferior direita aparecendo sobre uma imagem 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>

Altere o valor da margem para ajustar a posição do texto sobre a imagem. Remover a margem pode fazer com que o texto saia de vista às vezes.

JaydeepW
fonte
melhor resposta ... obrigado, resolveu um mistério antigo.
YvesLeBorg,
38

Isso pode ser alcançado 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
fonte
1
Isso não funciona, se usar wrap_contentem RelativeLayout. Porque então de qualquer maneira RelativeLayout escalado na tela inteira.
Yura Shinkarev
15

Configuração android:layout_gravity="bottom|right"funcionou para mim

Jakob
fonte
9

Duas maneiras de fazer isso:

1) Usando um layout de quadro

android:layout_gravity="bottom|right"

2) Usando um Layout Relativo

android:layout_alignParentRight="true"
android:layout_alignParentBottom="true" 
Jorgesys
fonte
5
android:layout_gravity="bottom"
superarts.org
fonte
por que usamos a gravidade, o que é específico
blackHawk
3

Se você quiser tentar com o código java. Aqui está -

    final LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, 
                                             LayoutParams.WRAP_CONTENT);
    yourView.setLayoutParams(params);
    params.gravity = Gravity.BOTTOM; // set gravity
Rahul
fonte
apenas o que eu quero. Pequena adição - LayoutParams deve ser de FrameLayout.LayoutParams. E se quiser usar o canto inferior direito: params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
SajithK
2

você pode adicionar um TextView invisível ao 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
fonte
0

Existem muitos métodos para fazer isso usando o widget de restrição da página activity.xml do android studio.

Dois métodos mais comuns são:

  1. Selecione sua visualização de botão e ajuste suas margens.
  2. Vá para "Todos os atributos", depois para "layout_constraints" e selecione
    • layout_constraintBottom_toBottomOf_parent
    • layout_constraintRight_toRightOf_parent
Pawananjani Kumar
fonte
-3

Você não pode fazer isso com FrameLayout.

Da especificação:

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

"FrameLayout é projetado para bloquear uma área na tela para exibir um único item. Você pode adicionar vários filhos a um FrameLayout, mas todos os filhos são fixados no canto superior esquerdo da tela."

Por que não usar o RelativeLayout?

Juhani
fonte
Quero que uma lista seja mostrada no lado esquerdo, sobrepondo o mapa. Oh, isso é possível com RelativeLayout, não é? Ok, obrigado.
Rohith Nandakumar
1
"mas todas as crianças estão fixadas no canto superior esquerdo da tela" - não necessariamente no topo da tela, você pode alinhá-lo à direita, inferior etc.
Rohith Nandakumar
Sim, isso é possível com RelativeLayout. Você pode criar o layout de visualizações uma em cima da outra.
Juhani
Na verdade, isso está parcialmente correto. O que o OP está pedindo é alcançável, mas com visão limitada, é claro, como você mencionou. Mas dizer que isso é 'não alcançável' seria errado!
sud007