Android布局错误“嵌套权重对性能不利”

时间:2014-08-17 15:24:36

标签: android android-layout android-xml

我试图在上面做这个布局 enter image description here

这是我的代码

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0.80"
        android:orientation="horizontal" >

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="0.50"
            android:padding="10dp" />

        <RelativeLayout>
        </RelativeLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="0.50"
            android:orientation="vertical" >
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0.20"
        android:orientation="vertical" >
    </LinearLayout>

</LinearLayout>

在ImageView中,我收到错误“嵌套权重对性能不利”。我想了解为什么会发生这种情况,以及是否有人为这种布局提供了更好的解决方案。

3 个答案:

答案 0 :(得分:1)

layout_weight属性是指定百分比维度的宽度或高度的另一种方法,并优化您应该使用0dp到其中一个(您要替换的那个)的维度的计算用)。

另一个优化提示是删除布局中未使用的<RelativeLayout></RelativeLayout>

请尝试以下解决方案:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.80"
        android:orientation="horizontal" >

        <ImageView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.50"
            android:padding="10dp" />

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.50"
            android:orientation="vertical" >
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.20"
        android:orientation="vertical" >
    </LinearLayout>

</LinearLayout>

答案 1 :(得分:0)

错误&#34;嵌套权重对性能不利&#34;因为你有一个加权的LInearLayout&#34;嵌套&#34;在另一个加权的LinearLayout内部(见下文)。为了让Android执行此操作,必须绘制整个屏幕以获取所有非嵌套布局测量值,然后再次绘制它以计算&#34;嵌套&#34;加权布局。

这可能是一个巨大的性能打击。但是,我构建了一个具有4层嵌套和大约100个布局的屏幕,包括大量图像。在较新的设备上渲染大约需要5毫秒,通常更少。因此,如果您经常重新绘制嵌套布局(例如尝试使用嵌套布局的动画),这实际上只是一个问题。如果您没有看到可以在logcat中测量或在使用应用程序时观察到的性能损失,请不要担心。彻底测试!

换句话说,它是一个警告,而不是一个错误。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.80"
    android:orientation="horizontal" >

    <ImageView
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.50"
        android:padding="10dp" />

    <!-- THIS IS YOUR NESTED WEIGHTED LAYOUT -->
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.50"
        android:orientation="vertical" >
    </LinearLayout>
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.20"
    android:orientation="vertical" >
</LinearLayout>

答案 2 :(得分:0)

我宁愿写下面的内容。请注意使用整数而不是分数:

    <?xml version="1.0" encoding="utf-8"?>

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

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="4"
            android:orientation="horizontal" >

        <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:padding="10dp" />

        <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:orientation="vertical" >
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="vertical" >
    </LinearLayout>

</LinearLayout>