Cosa fa FrameLayout?


97

Sono nuovo nella programmazione. Stavo usando il layout grafico, quindi mentre leggevo il file xml, ho visto FrameLayout. Poi ho cercato, ma non sono riuscito a trovare qualcosa di utile. Cos'è FrameLayout e cosa fa?



12
Sì, ero stato lì ma non sono riuscito a trovare qualcosa che fosse comprensibile.
Amin Ghasemi

Risposte:


196

Si usa un FrameLayout per impilare le visualizzazioni figlio una sopra l'altra, con il figlio più recente in cima allo stack. Nell'esempio seguente, TextView è il più recente, quindi viene automaticamente posizionato sopra ImageView.

Per esempio:

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

Produzione:

inserisci qui la descrizione dell'immagine


40
Adoro vedere il codice con il loro output. Molte grazie! Votato. Inoltre, mi piace il design che hai realizzato lì. Semplicemente ma molto carino!
Tarik

3
Spiegazione molto semplice, potente ma facile - grazie @ojonugwaochalifu!
Coder Absolute

2
Ottima spiegazione. Anch'io ho letto la descrizione dello sviluppatore sulla pagina ufficiale e ho pensato che la frase "in alto" significasse più verso la parte superiore dello schermo. La tua spiegazione ha fatto clic per me sulla natura 3D di "in alto" e ora ho capito. Grazie mille :)
Slartibartfast

1
@ojonugwaochalifu: grazie per la spiegazione. Ho una piccola domanda, le cose che abbiamo fatto qui, possiamo fare anche con il layout relativo. Allora, perché usiamo il layout del frame?
akashPatra

3
Sì, fanno quasi la stessa cosa, ma ricorda che una buona pratica di progettazione per le viste è quella di utilizzare il minor numero di annidamenti possibile per i layout. Quando si utilizza un FrameLayout, l'annidamento richiesto per posizionare le viste l'una sull'altra è inferiore rispetto a quando si utilizza un RelativeLayout.
Ojonugwa Jude Ochalifu

75

FrameLayoutè l'implementazione più semplice di ViewGroup. Le viste secondarie sono disegnate in una pila, dove l'ultima vista aggiunta è disegnata in alto. Di solito puoi usare uno dei prossimi approcci o combinarli:

  1. Aggiungi una singola gerarchia di visualizzazione in FrameLayout
  2. Aggiungi più bambini e usali android:layout_gravityper spostarti

inserisci qui la descrizione dell'immagine

Un altro approccio popolare di utilizzo FrameLayout:

  • come un Fragmentcontenitore
  • come un antenato del tuo costume ViewGroup

23

Puoi considerare la parola framecome una normale cornice per foto. Cosa fai con quella cornice? puoi posizionare le foto in quella cornice, una sopra l'altra. Come in FrameLayoutpossiamo posizionare le visualizzazioni (qualsiasi layout, pulsante come widget, testo, immagine e così via) sopra le altre poiché @ojonugwa ti mostra la visualizzazione del testo in alto nell'immagine.


Bello, stavo pensando a iframecome vengo dallo sviluppo web. Grazie per la spiegazione più semplice.
Tarik

19

Sei sicuro di averlo cercato su Google?

Il layout della cornice è progettato per bloccare un'area sullo schermo per visualizzare un singolo elemento. In genere, FrameLayout dovrebbe essere usato per contenere una singola visualizzazione figlio, perché può essere difficile organizzare le visualizzazioni figlio in un modo che sia scalabile a diverse dimensioni dello schermo senza che gli elementi figlio si sovrappongano.

Puoi, tuttavia, aggiungere più figli a un FrameLayout e controllare la loro posizione all'interno del FrameLayout assegnando la gravità a ogni bambino, utilizzando l'attributo android: layout_gravity.

Il segreto di FrameLayout è il modo in cui impagina i suoi figli. Sebbene normalmente progettato per contenere un oggetto, impilerà felicemente altri elementi uno sopra l'altro. Pertanto FrameLayout è essenzialmente un modo per manipolare l'ordine Z delle visualizzazioni sullo schermo.

Questo è molto utile per un paio di trucchi dell'interfaccia utente da elementi simili a HUD a pannelli scorrevoli a transizioni animate più complesse. In questo post vedremo un esempio per ciascuno di essi.

FrameLayout è progettato per visualizzare un singolo elemento alla volta. Puoi avere più elementi all'interno di un FrameLayout, ma ogni elemento sarà posizionato in base alla parte superiore sinistra dello schermo. Gli elementi che si sovrappongono verranno visualizzati sovrapposti. Ho creato un semplice layout XML utilizzando FrameLayout che mostra come funziona.


8
si li ho visti. ma non sono riuscito a scoprire cosa stanno dicendo.
Amin Ghasemi

Puoi pensarlo come una cornice. Fondamentalmente ciò che metti sarà allineato a sinistra dello schermo. learn-android-easily.com/2013/05/frame-layout-in-androis.html
Metehan

Quindi dovresti usarlo per visualizzare un singolo elemento per la maggior parte delle volte.
Metehan

4

Fondamentalmente mette una vista sopra l'altra, ad esempio:

Testo di gonfiaggio sull'immagine

  <FrameLayout>

<ImageView>
<Textview>

  </FrameLayout>

1
nessun layout lineare si posiziona uno dopo l'altro ... i fotogrammi vengono posizionati sopra .. diciamo per un senario come se ci fosse una griglia sulle immagini e ci fosse un pulsante di annullamento sopra quell'immagine ..... lì usiamo il layout dei fotogrammi
KOTIOS
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.