Por qué se está ignorando el margen de LinearLayout si se utiliza como vista de línea ListView

Me preguntaba, si simplemente proporcionar una sola capa de LinearLayout como vista de fila de ListView, su margen será ignorado.

El margen será ignorado si se usa de la vista de fila de ListView

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="5dp" 

Sin embargo, si proporciono la capa doble de LinearLayout , con la primera capa actuada como capa "ficticia", su margen no será ignorado.

Tendremos margen en la vista de filas de ListView

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/buyPortfolioLinearLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="5dp" 

¿Puedo saber por qué sucede así?

El hecho es que, el margen de LinearLayout (niño) pide a su diseño padre (contenedor) para dar al diseño de niño un margen de valor x.

Así que si LayoutParams de los diseños de los padres soporta los márgenes entonces ese margen es honrado y aplicado.

ListView utiliza AbsListView.LayoutParams por defecto, que no incluye ningún soporte de margen, sólo la altura y el ancho, es por eso, simplemente ignora el valor de los parámetros para los márgenes.

Mientras que otros parámetros de diseño como ActionBar.LayoutParams , FrameLayout.LayoutParams , GridLayout.LayoutParams , LinearLayout.LayoutParams y RelativeLayout.LayoutParams son hijos de ViewGroup.MarginLayoutParams , que honra los valores de margen del niño.

Cuando se utiliza un diseño sigle esto significa que esta es su ventana si se aplica margen en ella, entonces usted va a pedir el margen de esa cantidad de su vista padre, pero no tenemos vista de los padres de modo margen no funcionará. En el segundo lugar hay vista de los padres y el margen ayudará para la vista interna, pero no para el exterior.

En lugar de agregar un diseño anidado, podría utilizar el relleno de la siguiente manera:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="5dp" 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.