O que o FrameLayout faz?

100

Sou novo em programação. Eu estava usando o layout gráfico quando estava lendo um arquivo xml, vi o FrameLayout. Então procurei, mas não consegui encontrar algo útil. O que é FrameLayout e o que ele faz?

Amin Ghasemi
fonte
1
Você já passou por aqui? developer.android.com/reference/android/widget/FrameLayout.html
Ed_Fernando
14
Sim, eu tinha estado lá, mas não conseguia encontrar nada que fosse compreensível.
Amin Ghasemi,

Respostas:

199

Você usa um FrameLayout para empilhar visualizações filhas umas sobre as outras, com as filhas mais recentes no topo da pilha. No exemplo abaixo, o TextView é o mais recente, portanto, é automaticamente colocado no topo do ImageView.

Por exemplo:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/backgroundImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="centerCrop"
        android:src="@drawable/bitmapie" />

    <TextView
        android:id="@+id/descTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginTop="70dp"
        android:background="@android:color/holo_blue_light"
        android:padding="10dp"
        android:text="TextView placed at the top of the Imageview"
        android:textColor="@android:color/white"
        android:textSize="22sp" />

</FrameLayout>

Resultado:

insira a descrição da imagem aqui

Ojonugwa Jude Ochalifu
fonte
42
Adoro ver código com a saída deles. Muito obrigado! Votado. Além disso, gosto do design que você fez lá. Simplesmente ainda muito bom!
Tarik
3
Explicação muito simples, poderosa, mas fácil - obrigado @ojonugwaochalifu!
Coder Absolute
2
Explicação muito boa. Eu também li a descrição do desenvolvedor na página oficial e pensei que a frase "no topo" significava mais para o topo da tela. Sua explicação fez com que a natureza 3D do "por cima" clique para mim e agora entendi. Muito obrigado :)
Slartibartfast
1
@ojonugwaochalifu: obrigado pela explicação. Eu tenho uma pequena consulta, as coisas que fizemos aqui, podemos fazer por layout relativo também. Então, por que usamos layout de quadro?
akashPatra
3
Sim, eles fazem quase a mesma coisa. Mas lembre-se, uma boa prática de design para visualizações é usar o mínimo de aninhamento possível para seus layouts. Quando você usa um FrameLayout, o aninhamento necessário para colocar visualizações umas nas outras é menor do que quando você usa um RelativeLayout.
Ojonugwa Jude Ochalifu
77

FrameLayouté a implementação mais simples de ViewGroup. As visualizações filhas são desenhadas em uma pilha, onde a última visualização adicionada é desenhada no topo. Normalmente você pode usar uma das próximas abordagens ou combiná-las:

  1. Adicione uma hierarquia de visualização única em FrameLayout
  2. Adicione vários filhos e use android:layout_gravitypara navegá-los

insira a descrição da imagem aqui

Outra abordagem popular de uso FrameLayout:

  • como um Fragmentrecipiente
  • como um ancestral de seu costume ViewGroup
yoAlex5
fonte
23

Você pode considerar a palavra framecomo moldura de foto normal. O que você faz com essa moldura? você pode colocar as fotos nesse quadro de cima para baixo. Da mesma forma FrameLayoutque podemos colocar visualizações (qualquer layout, ou widget como botão, texto, imagem, etc.) em cima dos outros, pois @ojonugwa mostra a visualização de texto no topo da imagem.

Asif Mushtaq
fonte
Legal, eu estava pensando nisso como uma parte iframedo desenvolvimento web. Obrigado pela explicação mais simples.
Tarik
19

Tem certeza de que pesquisou no Google?

O Layout do Quadro é projetado para bloquear uma área na tela para exibir um único item. Geralmente, FrameLayout deve ser usado para manter uma única exibição filho, porque pode ser difícil organizar exibições filho de uma maneira que seja escalonável para diferentes tamanhos de tela sem que os filhos se sobreponham.

No entanto, você pode adicionar vários filhos a um FrameLayout e controlar sua posição dentro do FrameLayout atribuindo gravidade a cada filho, usando o atributo android: layout_gravity.

O segredo do FrameLayout é como ele faz o layout de seus filhos. Embora normalmente projetado para conter um item, ele alegremente empilhará outro elemento um em cima do outro. Portanto, FrameLayout é essencialmente uma maneira de manipular a ordem Z das visualizações na tela.

Isso é muito útil para alguns truques de IU, de elementos do tipo HUD a painéis deslizantes e transições animadas mais complexas. Neste post veremos um exemplo para cada um deles.

FrameLayout é projetado para exibir um único item por vez. Você pode ter vários elementos em um FrameLayout, mas cada elemento será posicionado com base na parte superior esquerda da tela. Os elementos que se sobrepõem serão exibidos sobrepostos. Criei um layout XML simples usando FrameLayout que mostra como isso funciona.

Metehan
fonte
8
sim eu os vi. mas não consegui descobrir o que eles estão dizendo.
Amin Ghasemi
Você pode pensar nisso como uma moldura de imagem. Basicamente, o que você colocar será alinhado à esquerda da tela. learn-android-easily.com/2013/05/frame-layout-in-androis.html
Metehan
Portanto, você deve usá-lo para exibir um único item na maioria das vezes.
Metehan
5

Basicamente, ele coloca uma visão sobre a outra, por exemplo:

Inflar texto na imagem

  <FrameLayout>

<ImageView>
<Textview>

  </FrameLayout>
KOTIOS
fonte
1
não, o layout linear é colocado um após o outro ... o quadro é colocado em cima dele ... digamos, para um cenário, como se houvesse uma grade nas imagens e houvesse o botão Cancelar no topo dessa imagem ... usamos o layout do quadro
KOTIOS