我想知道,如果我只提供单层LinearLayout
作为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"
但是,如果我提供LinearLayout
的双层,第一层充当“虚拟”层,则其边距不会被忽略。
<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"
我可以知道为什么会这样吗?
答案 0 :(得分:64)
事实是,LinearLayout
(子)的边距要求其父布局(容器)为子布局提供x值的边距。
因此,如果父布局'LayoutParams支持边距,那么该边距将得到尊重并应用。
ListView
默认使用AbsListView.LayoutParams
,不包括任何边距支持,只包括高度和宽度,这就是为什么,它只是忽略了边距的参数值。
而其他布局参数如ActionBar.LayoutParams
,FrameLayout.LayoutParams
,GridLayout.LayoutParams
,LinearLayout.LayoutParams
和RelativeLayout.LayoutParams
是ViewGroup.MarginLayoutParams的孩子,这是孩子们的荣誉保证金价值。
答案 1 :(得分:0)
当你使用sigle布局时,这意味着这是你的窗口,如果你在它上面应用保证金,那么你将从父视图中询问该金额的保证金,但我们没有父视图,所以保证金不起作用。 在第二位有父视图,保证金将有助于内部视图,但不适用于外部视图。
答案 2 :(得分:-1)
您可以使用填充,而不是添加嵌套布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="5dp"