1

当我们执行嵌套权重时,Android Lint 会向我们发出警告,说嵌套权重对性能不利,所以我想知道如果我添加一个包含嵌套权重布局的额外布局会发生什么。它会对性能产生任何影响吗?

这里的人说布局权重需要一个小部件测量两次。当具有非零权重的 LinearLayout 嵌套在具有非零权重的另一个 LinearLayout 中时,测量的数量会呈指数增长。

所以我想知道是

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:baselineAligned="false"
            android:gravity="center"
            android:orientation="horizontal" >

            <FrameLayout
                android:id="@+id/fl_topleft"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/shape" />

            <FrameLayout
                android:id="@+id/fl_topright"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/shape" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:baselineAligned="false"
            android:gravity="center"
            android:orientation="horizontal" >

            <FrameLayout
                android:id="@+id/fl_bottomleft"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/shape" />

            <FrameLayout
                android:id="@+id/fl_bottomright"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/shape" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

优于

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dip"
         android:orientation="horizontal"
        android:layout_weight="1" >



            <FrameLayout
                android:id="@+id/fl_topleft"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/shape" />

            <FrameLayout
                android:id="@+id/fl_topright"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/shape" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dip"
         android:orientation="horizontal"
        android:layout_weight="1" >



            <FrameLayout
                android:id="@+id/fl_bottomleft"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/shape" />

            <FrameLayout
                android:id="@+id/fl_bottomright"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/shape" />

    </LinearLayout>

</LinearLayout>
4

1 回答 1

1

第二层布局不会阻止额外处理的发生/传播。

我的理解是,linearlayout 实际上总是执行两次传递,但这可能只是在实践中发生的情况,因为如果您不使用权重,您可以使用 relativelayout 进行相同的布局。

只是为了详细说明。onMeasure 传播从根向下移动发生两次。在这两种情况下,框架布局都测量了 4 次。

于 2013-09-14T11:40:20.263 回答