android - studio - wrap_content
¿Cuál es la diferencia entre match_parent y fill_parent? (18)
Estoy un poco confundido acerca de dos propiedades XML: match_parent
y fill_parent
. Parece que ambos son iguales. ¿Hay alguna diferencia entre ellos?
Ambos tienen una funcionalidad similar. La única diferencia es que fill_parent se usa hasta el nivel 8 de API y match_parent se usa después del nivel 8 o superior de API.
Cuando establece el width
y la height
diseño como match_parent
en la propiedad XML
, ocupará el área completa que tiene la vista principal, es decir, será tan grande como la principal.
<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>
El padre liebre es rojo y el niño es verde. El niño ocupa toda el área. Porque su width
y height
son match_parent
.
Nota: Si a los padres se les aplica un relleno, ese espacio no se incluirá.
<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>
Por lo tanto, TextView hight = 300dp (altura padre) - (20 (paddingTop) +10 (paddingBottom)) = (300 - 30) dp = 270 dp
fill_parent Vs match_parent
fill_parent
es el nombre anterior de match_parent
Para API Nivel 8 y superior, fill_parent
renombró como match_parent
y fill_parent
está en desuso ahora.
Así que fill_parent
y match_parent
son iguales.
Documentación API para fill_parent
La vista debe ser tan grande como su padre (menos el relleno). Esta constante está en desuso a partir del nivel 8 de API y se reemplaza por {@code match_parent}.
FILL_PARENT fue renombrado como MATCH_PARENT en el Nivel API 8 y superior, lo que significa que la vista desea ser tan grande como su padre (menos el relleno) - Google
Funcionalmente, no hay diferencia, Google acaba de cambiar el nombre de fill_parent a match_parent, del nivel de API 8 (Android 2.2). FILL_PARENT todavía está disponible por razones de compatibilidad.
LayoutParams.FILL_PARENT
y LayoutParams.MATCH_PARENT
tienen valor -1. No estoy seguro de lo que tentó a google a cambiar de Completar padre a coincidir padre :)
Dado que la mayoría de los phones are >= Android 2.2
... debe usar Match Parent para compatibilidad futura ... ¡no está seguro de cuándo descontinuarán la constante Fill Parent anterior!
Google cambió el nombre para evitar confusiones.
El problema con el antiguo nombre de fill parent
fue que implica que afecta las dimensiones del padre primario, mientras match parent
describe mejor el comportamiento resultante: relacionar la dimensión con el padre.
Ambas constantes se resuelven en -1
al final y, por lo tanto, dan como resultado un comportamiento idéntico en la aplicación. Irónicamente, este cambio de nombre hecho para aclarar las cosas parece haber agregado confusión en lugar de eliminarla.
Para mí, completar padre y coincidir padre realiza la misma función solo que:
completar padre : se usó antes de API 8
coincidir con el padre Esto se usó desde la API 8+ Función de ambos Llena la vista principal a un lado del relleno
Por motivos de compatibilidad, es mejor atenerse a fill_parent, es decir, cuando se admiten dispositivos por debajo de API 8. Pero si tu aplicación apunta a la API 8 o superior, deberías usar match_parent en su lugar.
Son lo mismo (en el nivel API 8+). Utilice match_parent
.
FILL_PARENT (renombrado como MATCH_PARENT en el nivel de API 8 y superior), lo que significa que la vista desea ser tan grande como su elemento primario (menos el relleno)
...
fill_parent
: La vista debe ser tan grande como su padre (menos el relleno). Esta constante está en desuso a partir del nivel 8 de API y se reemplaza pormatch_parent
.
http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html
fill_parent (renombrado como MATCH_PARENT en el nivel de API 8 y superior), lo que significa que la vista desea ser tan grande como su padre (menos el relleno)
fill_parent: La vista debe ser tan grande como su padre (menos el relleno). Esta constante está en desuso a partir del nivel 8 de API y se reemplaza por match_parent
Para Android API 1.6 a 2.1 match_parent le arrojará un error, así que use fill_parent en estos casos. Para admitir la compatibilidad con versiones anteriores, es mejor usar fill_parent
Ambas son constantes finales estáticas que representan el valor -1
FILL_PARENT está en desuso en el nivel 8 de API
¿Entonces MATCH_PARENT Y FILL_PARENT SON LOS MISMOS?
Sí, MATCH_PARENT y FILL_PARENT son solo nombres de constantes diferentes para el mismo valor entero (-1 si tienes curiosidad) que se usan para especificar el modo de diseño de una Vista dentro de su padre.
¿POR QUÉ SE AGREGÓ MATCH_PARENT?
Como dijo Roman Guy (Android Developer en Google), han cambiado el nombre porque "fill_parent" era confuso para los desarrolladores. Como cuestión de hecho, "fill_parent" no llena el espacio restante (para eso usa el atributo de peso) pero toma como
fill_parent: La vista debe ser tan grande como su padre.
ahora este contenido fill_parent está en desuso y reemplazado por match_parent.
match_parent, lo que significa que la vista quiere ser tan grande como su padre (menos el relleno).
wrap_content, lo que significa que la vista quiere ser lo suficientemente grande como para incluir su contenido (más el relleno)
Para una mejor ilustración, he creado un diseño de muestra que demuestra este concepto. Para ver su efecto, agregué un borde de cada contenido textView.
En el texto "Coincidir con el elemento primario" del texto, podemos ver que el ancho del diseño se extiende fuera de su longitud principal principal.
Pero podemos ver en el contenido de TextView "Wrap Content", el ancho del diseño incluido en su contenido (Wrap Content).
FILL_PARENT
está en desuso en la API de nivel 8 y MATCH_PARENT
usa la API de nivel superior
fill_parent
(renombrado como MATCH_PARENT
en el nivel de API 8 y superior), lo que significa que la vista desea ser tan grande como su padre (menos el relleno)
fill_parent
: La vista debe ser tan grande como su padre (menos el relleno). Esta constante está en desuso a partir del nivel 8 de API y se reemplaza por match_parent
Para Android API 1.6 a 2.1 match_parent
le arrojará un error, así que use fill_parent
en estos casos. Para admitir la compatibilidad con versiones anteriores, es mejor usar fill_parent
- Ambas son constantes finales estáticas que representan el valor -1
-
FILL_PARENT
está en desuso en el nivel 8 de API
¿Entonces MATCH_PARENT y FILL_PARENT son iguales?
Sí, MATCH_PARENT
y FILL_PARENT
son solo nombres de constantes diferentes para el mismo valor entero (-1 si tienes curiosidad) que se usan para especificar el modo de diseño de una Vista dentro de su padre.
Entonces, ¿por qué se agregó MATCH_PARENT?
Recuerdo que Roman Guy (Android Developer en Google) dijo que habían cambiado el nombre porque " fill_parent
" era confuso para los desarrolladores. Como cuestión de hecho, " fill_parent
" no llena el espacio restante (para eso utiliza el atributo de peso) pero ocupa tanto espacio como su diseño principal. Es por eso que el nuevo nombre es " match_parent
"
match_parent
y fill_parent
son la misma propiedad, se usan para definir el ancho o el alto de una vista en pantalla completa horizontal o verticalmente.
Estas propiedades se utilizan en archivos xml de Android como este.
android:layout_width="match_parent"
android:layout_height="fill_parent"
o
android:layout_width="fill_parent"
android:layout_height="match_parent"
fill_parent
se usó en versiones anteriores, pero ahora ha sido desaprobado y reemplazado por match_parent
. Espero que te ayude.
1. match_parent
Cuando establezca el ancho y la altura del diseño como match_parent, ocupará el área completa que tiene la vista principal, es decir, será tan grande como la principal.
Nota : Si a los padres se les aplica un relleno, ese espacio no se incluirá.
Cuando creamos un layout.xml de forma predeterminada, tenemos RelativeLayout como Vista primaria predeterminada con android: layout_width = "match_parent" y android: layout_height = "match_parent", es decir, ocupa todo el ancho y la altura de la pantalla móvil.
También tenga en cuenta que el relleno se aplica a todos los lados,
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
Ahora vamos a agregar una sub-vista LinearLayout y establece su layout_width = "match_parent" y layout_height = "match_parent", la vista gráfica mostraría algo como esto,
match_parent_example
Código
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.code2care.android.togglebuttonexample.MainActivity" >
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="11dp"
android:background="#FFFFEE"
android:orientation="vertical" >
2. fill_parent:
Esto es lo mismo que match_parent, fill_parent se depreció en el nivel 8 de la API. Por lo tanto, si está utilizando el nivel 8 o superior de la API, debe evitar usar fill_parent
Sigamos los mismos pasos que hicimos para match_parent, en su lugar, usamos fill_parent en todas partes.
Vería que no hay diferencia en el comportamiento de fill_parent y match parent.
MATCH_PARENT
y FILL_PARENT
son lo mismo?
Sí, MATCH_PARENT
y FILL_PARENT
son solo nombres de constantes diferentes para el mismo valor entero (-1 si tienes curiosidad) que se usan para especificar el modo de diseño de una Vista dentro de su padre.
Entonces, ¿por qué se agregó MATCH_PARENT
?
El equipo de Android descubrió que los desarrolladores estaban malinterpretando FILL_PARENT
para indicar que una View
llenaría el espacio restante en su padre. De hecho, al especificar FILL_PARENT
, la View
solicita ser tan grande como su padre.
Bien, entiendo cómo funciona FILL_PARENT/MATCH_PARENT
. ¿Qué importa si uso uno u otro?
FILL_PARENT
está en desuso. Estar en desuso no lo convierte en el diablo, pero eventualmente desaparecerá. Su aplicación es más MATCH_PARENT
futuro utilizando MATCH_PARENT
. ¿Por qué usar la opción en desuso cuando la opción actual se comporta exactamente igual?
Además, FILL_PARENT
es realmente engañoso. Personalmente he visto a la gente confundida porque no funciona de la forma en que pensaron que lo haría. De hecho, he visto una sola etiqueta que usa tanto FILL_PARENT
como MATCH_PARENT
, porque el desarrollador pensó (comprensiblemente) que eran dos modos de diseño diferentes.
¿CÓMO SE PUEDE FILL_PARENT
UN FILL_PARENT
EN FILL_PARENT
?
Este es un ejemplo rápido de cómo la confusión de MATCH_PARENT/FILL_PARENT
puede llevar a que las personas apliquen repetidamente sus cabezas en sus escritorios. Primero, tome un diseño realmente simple que contenga algunas instancias de 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 para darle un nombre más cercano a su acción real . "fill_parent"
no llena el espacio restante como lo implica el nombre (para eso usa el atributo de peso). En su lugar, ocupa tanto espacio como su diseño principal. Es por eso que el nuevo nombre es "match_parent"
match_parent se usa en lugar de fill_parent y lo establece para que llegue hasta donde llega el padre. Solo usa match_parent y olvídate de fill_parent . Me deshice completamente de fill_parent y todo es perfecto como siempre.
Compruebe http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html para más.