嵌套权重与带权重的嵌套布局。哪个更好?

时间:2013-09-14 10:48:41

标签: android performance android-layout android-linearlayout android-lint

当我们进行嵌套权重表示嵌套权重对性能不利时,Android Lint会给我们警告,所以我想知道如果我添加一个包含嵌套称重布局的额外布局会发生什么。性能会有什么不同吗?

该人here表示布局权重需要两次测量小部件。当具有非零权重的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>

1 个答案:

答案 0 :(得分:1)

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

我的理解是,线性布局实际上总是完成两次通过,但这可能只是在实践中发生的事情,因为如果你不使用权重,你可以使用relativelayout进行相同的布局。

只是详细说明。 onMeasure传播从根向下移动两次。在这两种情况下,帧布局都会被测量4次。