type - layout android developer




Qual è la differenza tra match_parent e fill_parent? (12)

Sono un po 'confuso riguardo due proprietà XML: match_parent e fill_parent . Sembra che entrambi siano uguali. C'è qualche differenza tra loro?


Entrambi hanno funzionalità simili, la sola differenza è che fill_parent viene utilizzato fino al livello API 8 e match_parent viene utilizzato dopo il livello API 8 o superiore.


FILL_PARENT è stato rinominato MATCH_PARENT in API Livello 8 e versioni successive, il che significa che la vista vuole essere grande quanto il suo genitore (meno riempimento) - Google


Google ha cambiato il nome per evitare confusione.

Il problema con il vecchio nome di fill parent era che implicava il fatto che influiva sulle dimensioni del genitore, mentre il match parent descrive meglio il comportamento risultante - abbina la dimensione con il genitore.

Entrambe le costanti si risolvono in -1 alla fine e quindi determinano il comportamento identico nell'app. Ironia della sorte, questo cambio di nome fatto per chiarire le cose sembra aver aggiunto confusione piuttosto che eliminarlo.


Per me, riempire il genitore e il parente genitore svolge la stessa funzione solo che:

riempimento genitore : è stato utilizzato prima dell'API 8

match parent Questo è stato usato dalla funzione API 8+ di entrambi i riempimenti la vista genitore a parte il padding


Quando imposti la width e l' height layout come match_parent nella proprietà XML , occuperà l'area completa della vista genitore, cioè sarà grande quanto il genitore.

<LinearLayout
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="#f9b0b0">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#b0f9dc"/>

</LinearLayout>

Il genitore di lepre è rosso e il bambino è verde. Il bambino occupa tutta l'area. Perché è width e height sono match_parent .

Nota: se a un genitore viene applicato un riempimento, tale spazio non verrebbe incluso.

<LinearLayout
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="#f9b0b0"
    android:paddingTop="20dp"
    android:paddingBottom="10dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#b0f9dc"/>

</LinearLayout>

Quindi TextView hight = 300dp (altezza padre) - (20 (paddingTop) +10 (paddingBottom)) = (300 - 30) dp = 270 dp

fill_parent Vs match_parent

fill_parent è il nome precedente di match_parent

Per API livello 8 e superiore fill_parent rinominato come match_parent e fill_parent è deprecato ora.

Quindi fill_parent e match_parent sono uguali.

Documentazione API per fill_parent

La vista dovrebbe essere grande quanto il suo genitore (meno padding). Questa costante è deprecata a partire dal livello API 8 e viene sostituita da {@code match_parent}.


Sono la stessa cosa (in API Level 8+). Usa match_parent .

FILL_PARENT (rinominato MATCH_PARENT in API Livello 8 e successive), il che significa che la vista vuole essere grande quanto il suo genitore (meno padding)

...

fill_parent : la vista dovrebbe essere grande quanto il suo genitore (meno padding). Questa costante è deprecata a partire dal livello API 8 e viene sostituita da match_parent .

http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html


fill_parent: la vista dovrebbe essere grande quanto il suo genitore.

ora questo contenuto fill_parent è deprecato e sostituito da match_parent.


match_parent, il che significa che la vista vuole essere grande quanto il suo genitore (meno padding).

wrap_content, il che significa che la vista vuole essere abbastanza grande da racchiudere il suo contenuto (più padding)

Per motivi di illustrazione migliore, ho creato un layout di esempio che dimostra questo concetto. Per vedere il suo effetto, ho aggiunto un bordo di ogni contenuto TextView.

Nel contenuto della visualizzazione di testo "Match parent", possiamo vedere che la larghezza del layout è estesa all'intera lunghezza genitore.

Ma possiamo vedere nel contenuto di textView "Wrap Content", la larghezza del layout è racchiusa nella sua lunghezza di contenuto (Wrap Content).


fill_parent (rinominato MATCH_PARENT in API Livello 8 e successive), il che significa che la vista vuole essere grande quanto il suo genitore (meno padding)

fill_parent : la vista dovrebbe essere grande quanto il suo genitore (meno padding). Questa costante è deprecata a partire dal livello API 8 e viene sostituita da match_parent

Per le API Android da 1.6 a 2.1 match_parent genererà un errore, quindi utilizza fill_parent in questi casi. Per supportare la compatibilità con le versioni precedenti, è meglio utilizzare fill_parent

  • Entrambe sono costanti finali statiche che rappresentano il valore -1
  • FILL_PARENT è obsoleto in livello API 8

Quindi MATCH_PARENT e FILL_PARENT sono uguali?

Sì, MATCH_PARENT e FILL_PARENT sono solo nomi di costanti diversi per lo stesso valore intero (-1 se sei curioso) usati per specificare la modalità di layout di una vista all'interno del suo genitore.

Allora perché è stato aggiunto MATCH_PARENT?

Ricordo che Roman Guy (sviluppatore Android di Google) disse che avevano cambiato nome perché " fill_parent " era fill_parent confusione per gli sviluppatori. Per quanto riguarda il fatto, " fill_parent " non riempie lo spazio rimanente (per questo si usa l'attributo weight) ma occupa tutto lo spazio del genitore del layout. Ecco perché il nuovo nome è " match_parent "


match_parent e fill_parent sono la stessa proprietà, utilizzata per definire la larghezza o l'altezza di una vista a schermo intero orizzontalmente o verticalmente.

Queste proprietà sono utilizzate nei file android xml come questo.

 android:layout_width="match_parent"
 android:layout_height="fill_parent"

o

 android:layout_width="fill_parent"
 android:layout_height="match_parent"

fill_parent stato utilizzato nelle versioni precedenti, ma ora è stato deprecato e sostituito da match_parent . Spero ti possa aiutare.


MATCH_PARENT e FILL_PARENT sono gli stessi?

Sì, MATCH_PARENT e FILL_PARENT sono solo nomi di costanti diversi per lo stesso valore intero (-1 se sei curioso) usati per specificare la modalità di layout di una vista all'interno del suo genitore.

Allora perché è stato aggiunto MATCH_PARENT ?

Il team di Android ha scoperto che gli sviluppatori interpretavano erroneamente FILL_PARENT per indicare che una View avrebbe riempito lo spazio rimanente rimasto nel genitore. Infatti, specificando FILL_PARENT , la View richiede di essere grande quanto il suo genitore.

Ok, ho FILL_PARENT/MATCH_PARENT come funziona FILL_PARENT/MATCH_PARENT . Che importa se uso l'una o l'altra?

FILL_PARENT è deprecato. Essere deprecato non lo rende il Diavolo, ma alla fine andrà via. La tua applicazione è più a prova di futuro con MATCH_PARENT . Perché utilizzare l'opzione deprecata quando l'opzione corrente si comporta esattamente nello stesso modo?

Inoltre, FILL_PARENT è in realtà fuorviante. Personalmente ho visto gente confusa perché non funziona come pensavano. In effetti, ho visto un singolo tag che utilizza FILL_PARENT e MATCH_PARENT , perché lo sviluppatore pensava (comprensibilmente) che fossero due diverse modalità di layout.

COME FILL_PARENT OTTENERE FILL_PARENT A FILL_PARENT ?

Ecco un rapido esempio di come la confusione di MATCH_PARENT/FILL_PARENT può portare la gente a mettere ripetutamente la testa sulla scrivania. Per prima cosa, prendi un layout molto semplice contenente alcune istanze di View .

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

    <View
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="#FFFF00" />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:background="@android:color/black"
        android:text="@string/hello_world"
        android:padding="50dp" />
    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000" />

</LinearLayout>

Solo per dargli un nome più vicino alla sua azione reale . "fill_parent" non riempie lo spazio rimanente come implicherebbe il nome (per questo si usa l'attributo weight). Invece, occupa tanto spazio quanto il suo genitore di layout. Ecco perché il nuovo nome è "match_parent"





android-layout