如果用作ListView行视图,为什么会忽略LinearLayout的边距

时间:2013-04-29 12:01:34

标签: android

我想知道,如果我只提供单层LinearLayout作为ListView的行视图,它的边距将被忽略。

如果使用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的双层,第一层充当“虚拟”层,则其边距不会被忽略。

我们将在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"

我可以知道为什么会这样吗?

3 个答案:

答案 0 :(得分:64)

事实是,LinearLayout(子)的边距要求其父布局(容器)为子布局提供x值的边距。

因此,如果父布局'LayoutParams支持边距,那么该边距将得到尊重并应用。

ListView默认使用AbsListView.LayoutParams,不包括任何边距支持,只包括高度和宽度,这就是为什么,它只是忽略了边距的参数值。

而其他布局参数如ActionBar.LayoutParamsFrameLayout.LayoutParamsGridLayout.LayoutParamsLinearLayout.LayoutParamsRelativeLayout.LayoutParamsViewGroup.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"