34

我在想,如果我只提供一个作为 ListView 的行视图的单层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,第一层充当“虚拟”层,它的边距将不会被忽略。

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

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

4

3 回答 3

68

事实是,LinearLayout(child) 的边距要求其父布局(容器)给子布局一个 x 值的边距。

因此,如果父布局的 LayoutParams 支持边距,则该边距将得到尊重和应用。

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

而其他布局参数,如、 、ActionBar.LayoutParamsFrameLayout.LayoutParams是ViewGroup.MarginLayoutParams的子级它尊重子级的边距值。GridLayout.LayoutParamsLinearLayout.LayoutParamsRelativeLayout.LayoutParams

于 2013-04-29T12:34:48.693 回答
1

当您使用单一布局时,这意味着如果您在其上应用边距,这就是您的窗口,那么您将从父视图中请求该数量的边距,但我们没有父视图,因此边距将不起作用。第二位是父视图,边距将有助于内部视图,但不适用于外部视图。

于 2013-04-29T12:42:33.093 回答
-1

您可以像这样使用填充,而不是添加嵌套布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="5dp"
于 2014-08-11T18:17:05.323 回答