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?

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


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.


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>

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


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" 


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

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>


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

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.