¿Qué hace FrameLayout?

Respuestas:

196

Utiliza un FrameLayout para apilar las vistas secundarias una encima de la otra, con la secundaria más reciente encima de la pila. En el siguiente ejemplo, TextView es el más reciente, por lo que se coloca automáticamente en la parte superior de ImageView.

Por ejemplo:

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

Salida:

ingrese la descripción de la imagen aquí

Ojonugwa Jude Ochalifu
fuente
40
Me encanta ver el código con su salida. ¡Muchas gracias! Voto a favor. Además, me gusta el diseño que hiciste allí. ¡Simplemente pero muy agradable!
Tarik
3
Explicación muy simple, poderosa pero fácil: ¡gracias @ojonugwaochalifu!
Coder Absolute
2
Muy buena explicación. Yo también leí la descripción del desarrollador en la página oficial y pensé que la frase "en la parte superior" significaba más en la parte superior de la pantalla. Su explicación hizo que la naturaleza 3D de "arriba" haga clic para mí y ahora lo entiendo. Muchas gracias :)
Slartibartfast
1
@ojonugwaochalifu: gracias por la explicación. Tengo una pequeña consulta, las cosas que hemos hecho aquí, también las podemos hacer por diseño relativo. Entonces, ¿por qué usamos el diseño de marcos?
AkashPatra
3
Sí, hacen casi lo mismo, pero recuerde, una buena práctica de diseño para las vistas es utilizar la menor cantidad de anidamiento posible para sus diseños. Cuando usa un FrameLayout, el anidamiento requerido para colocar vistas entre sí es menor que cuando usa un RelativeLayout.
Ojonugwa Jude Ochalifu
75

FrameLayoutes la implementación más simple de ViewGroup. Las vistas secundarias se dibujan en una pila, donde la última vista agregada se dibuja en la parte superior. Por lo general, puede usar uno de los siguientes enfoques o combinarlos:

  1. Agregue una jerarquía de vista única en FrameLayout
  2. Agregue varios niños y utilícelos android:layout_gravitypara navegar por ellos

ingrese la descripción de la imagen aquí

Otros enfoques populares de uso FrameLayout:

  • como Fragmentcontenedor
  • como antepasado de tu costumbre ViewGroup
yoAlex5
fuente
23

Puede considerar la palabra framecomo un marco de fotos normal. ¿Qué haces con ese marco? puede colocar fotos en ese marco de una parte superior a otra. Al igual que en FrameLayout, podemos colocar vistas (cualquier diseño o widget como botón, texto, imagen, etc.) una encima de otra, ya que @ojonugwa le muestra la vista de texto en la parte superior de la imagen.

Asif Mushtaq
fuente
Bien, estaba pensando en ello iframecomo si vengo del desarrollo web. Gracias por la explicación más sencilla.
Tarik
19

¿Estás seguro de que lo buscaste en Google?

El diseño del marco está diseñado para bloquear un área en la pantalla para mostrar un solo elemento. Generalmente, FrameLayout debe usarse para contener una sola vista secundaria, porque puede ser difícil organizar las vistas secundarias de una manera que sea escalable a diferentes tamaños de pantalla sin que los elementos secundarios se superpongan entre sí.

Sin embargo, puede agregar varios niños a un FrameLayout y controlar su posición dentro del FrameLayout asignando gravedad a cada niño, utilizando el atributo android: layout_gravity.

El secreto de FrameLayout es cómo distribuye a sus hijos. Aunque normalmente está diseñado para contener un elemento, felizmente apilará otros elementos uno encima del otro. Por tanto, FrameLayout es esencialmente una forma de manipular el orden Z de las vistas en la pantalla.

Esto es muy útil para un par de trucos de la interfaz de usuario, desde elementos similares a HUD hasta paneles deslizantes y transiciones animadas más complejas. En esta publicación veremos un ejemplo para cada uno de ellos.

FrameLayout está diseñado para mostrar un solo elemento a la vez. Puede tener varios elementos dentro de un FrameLayout, pero cada elemento se colocará en función de la parte superior izquierda de la pantalla. Los elementos que se superponen se mostrarán superpuestos. He creado un diseño XML simple usando FrameLayout que muestra cómo funciona.

Metehan
fuente
8
sí los vi. pero no pude averiguar qué están diciendo.
Amin Ghasemi
Puedes pensarlo como un marco de fotos. Básicamente, lo que pones se alineará a la izquierda de la pantalla. learn-android-easily.com/2013/05/frame-layout-in-androis.html
Metehan
Por lo tanto, debe usarlo para mostrar un solo elemento la mayoría de las veces.
Metehan
4

Básicamente, coloca una vista encima de otra, por ejemplo:

Inflar texto en la imagen

  <FrameLayout>

<ImageView>
<Textview>

  </FrameLayout>
KOTIOS
fuente
1
no, linearlayout se coloca uno tras otro ... el marco se coloca encima ... digamos que para un senario hay una cuadrícula en las imágenes y hay un botón de cancelar en la parte superior de esa imagen ... allí usamos el diseño del marco
KOTIOS