布局重量警告嵌套重量不良表现

时间:2013-02-06 05:58:17

标签: android android-linearlayout

我是android新手。现在我收到了嵌套重量不良表现的警告。我的第一个屏幕上只有一个图像和三个按钮。 PLs给了我一些想法。


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/backgroundColor"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:weightSum="10"
    >


    <ImageView
        android:layout_weight="4"
        android:id="@+id/imageLogo"
        android:layout_width="wrap_content" 
        android:layout_height="0dip"
        android:contentDescription="@string/Img"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="20dp"
        android:src="@drawable/home_screen_logo" />

    <LinearLayout
       android:layout_weight="6"
       android:layout_width="fill_parent"
    android:layout_height="0dip" 
    android:orientation="vertical" 
    android:gravity="center_horizontal"
        >

        <LinearLayout android:layout_height="0dp" android:layout_width="fill_parent"
            android:layout_weight="1"
            android:id="@+id/temp"></LinearLayout>
    <ImageButton
        android:id="@+id/btnLogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/login"
        android:contentDescription="@string/Img"  
        android:layout_weight="1"
        />
    <LinearLayout android:layout_height="0dp" android:layout_width="fill_parent"
            android:layout_weight="1"></LinearLayout>
    <ImageButton
        android:id="@+id/btnFbLogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
         android:background="@drawable/btnfb"
         android:contentDescription="@string/Img"
        />
    <LinearLayout android:layout_height="0dp" android:layout_width="fill_parent"
            android:layout_weight="1"></LinearLayout>
    <ImageButton
        android:id="@+id/btnRegister"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/btnregister"
        android:contentDescription="@string/Img"/>
</LinearLayout>
</LinearLayout>


在此先感谢

3 个答案:

答案 0 :(得分:6)

  

嵌套权重对性能不利,因为:

     
    

布局权重需要测量窗口小部件两次。当具有非零权重的LinearLayout嵌套在具有非零权重的另一个LinearLayout内时,则测量数量呈指数增长。

  
     

最好使用RelativeLayouts并根据其他视图的位置调整视图,而不使用特定的dpi值。

礼貌:Why are nested weights bad for performance? Alternatives?

答案 1 :(得分:0)

嵌套权重对性能不利,因为:

  

布局权重需要测量窗口小部件两次。当一个   具有非零权重的LinearLayout嵌套在另一个内   LinearLayout具有非零权重,然后是测量次数   以指数方式增长。

最好使用RelativeLayout并根据其他视图的位置调整视图,而不使用特定的dpi值。

参考:http://developer.android.com/resources/articles/layout-tricks-efficiency.html

在大多数情况下,您可以使用RelativeLayout来避免这种昂贵的测量。在RelativeLayout中,视图与其父级,RelativeLayout本身或其他视图对齐。

为了清楚地了解视图相对于彼此的位置,可以使用Android SDK的HierarchyViewer透视图捕获布局的线框。

答案 2 :(得分:0)

尝试从线性布局中删除android:weightSum="10",同时删除android:layout_weight="1"

现在你看到警告消失了!

确保保持按钮中的权重以及线性布局中的其他内容!

我希望这可以解决你的问题:)