布局被测量两次,可能是什么问题?

时间:2016-09-01 23:46:53

标签: android performance gpu-overdraw

我使用以下布局:

<merge
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

    <VideoView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ProgressBar
        android:visibility="invisible"
        android:id="@+id/progress"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:id="@+id/llSearch"
        android:visibility="visible"
        android:background="#50AAAAAA"
        android:paddingTop="10dp"
        android:gravity="center_vertical"
        android:paddingBottom="10dp"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="72dp">

        <ImageView
            android:layout_marginLeft="16dp"
            android:layout_marginStart="16dp"
            android:src="@drawable/abc_ic_search_api_mtrl_alpha"
            android:layout_width="40dp"
            android:layout_height="40dp" />

        <EditText
            android:textColor="@android:color/white"
            android:textColorHint="@android:color/white"
            android:background="@android:color/transparent"
            android:visibility="visible"
            android:maxLines="1"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:visibility="invisible"
        android:layout_marginTop="72dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <android.support.v7.widget.RecyclerView
        android:visibility="gone"
        android:layout_marginTop="72dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <com.myapp.custom.RevealView
        android:id="@+id/reveal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</merge>

通过DDMS运行应用程序时,我注意到布局最终被测量了两次,为什么会这样,我该如何防止透支?

enter image description here

我也无法弄清楚其他LinearLayout来自哪里,这也很奇怪。

1 个答案:

答案 0 :(得分:0)

测量两次不是透支。根据您使用Android的布局类型,可能需要对其进行两次测量,因为子视图之间的关系需要它。这可能发生在像LinearLayout或RelativeLayout这样的布局上。出于确切的原因,你需要检查它们的来源,但这通常不是问题。

但是如果你有类似于recycleview的东西,你应该避免在里面使用大的嵌套布局。