layout_width和layout_weight - 性能

时间:2013-04-02 14:18:21

标签: android

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

    <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="60dip"
    android:orientation="horizontal"
    android:background="#80939393"
    android:gravity="center_vertical"
     >

    <CheckBox
        android:id="@+id/column1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0" />


    <View android:layout_height="fill_parent"
    android:layout_width="1dp"
    android:background="#90909090"/>


    <TextView
        android:id="@+id/column2"
        android:layout_width="30dip"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:gravity="center"
        android:text="@string/column_title_2" />

    <View android:layout_height="fill_parent"
    android:layout_width="1dp"
    android:background="#90909090"/>

    <LinearLayout
        android:layout_width="70dip"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:clickable="true"
        android:gravity="center_vertical"
        android:id="@+id/column3_container" >
        <TextView
            android:id="@+id/column3"
            android:layout_width="50dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="left"
            android:paddingLeft="8dp"
            android:text="@string/column_title_3" />
        <TextView
            android:id="@+id/sort_column_3"
            android:layout_width="20dip"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:gravity="center"
            android:textSize="24dp"
            android:paddingRight="8dp"
            android:text="@string/solid_up" />
    </LinearLayout>


    <View android:layout_height="fill_parent"
    android:layout_width="1dp"
    android:background="#90909090"/>


    <LinearLayout
        android:layout_width="70dip"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:clickable="true"
        android:gravity="center_vertical"
        android:id="@+id/column4_container" >
        <TextView
            android:id="@+id/column4"
            android:layout_width="50dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="left"
            android:paddingLeft="8dp"
            android:text="@string/column_title_4" />
        <TextView
            android:id="@+id/sort_column_4"
            android:layout_width="20dip"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:gravity="center"
            android:textSize="24dp"
            android:paddingRight="8dp"
            android:text="" />
    </LinearLayout>


    <View android:layout_height="fill_parent"
    android:layout_width="1dp"
    android:background="#90909090"/>


    <LinearLayout
        android:layout_width="70dip"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:clickable="true"
        android:gravity="center_vertical"
        android:id="@+id/column5_container" >
        <TextView
            android:id="@+id/column5"
            android:layout_width="50dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="left"
            android:paddingLeft="8dp"
            android:text="@string/column_title_5" />
        <TextView
            android:id="@+id/sort_column_5"
            android:layout_width="20dip"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:gravity="center"
            android:textSize="24dp"
            android:paddingRight="8dp"
            android:text="" />
    </LinearLayout>


    <View android:layout_height="fill_parent"
    android:layout_width="1dp"
    android:background="#90909090"/>


    <TextView
        android:id="@+id/column6"
        android:layout_width="50dip"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:gravity="center"
        android:text="@string/column_title_6" />

</LinearLayout>
    <View android:layout_height="1dp"
    android:layout_width="fill_parent"
    android:background="#90909090"/>
    <ListView
        android:id="@+id/mylist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:choiceMode="multipleChoice">
    </ListView>
    <View android:layout_height="1dp"
    android:layout_width="fill_parent"
    android:background="#90909090"/>

</LinearLayout>

我的日食对性能有两个警告。

使用Nested weights are bad for performance android:layout_weight="1"

Use a layout_width of 0dip instead of 50dip for better performance

有谁能说我为什么抛出这个错误?

2 个答案:

答案 0 :(得分:2)

我理解的方式是这样的: 由于您使用的是取代layout_weight的{​​{1}}。所以基本上layout_width被忽略了。但技术上并没有一直被忽略,而是系统正在应用layout_width,然后返回并进行数学运算以应用layout_width="50dp",这样它就可以完成两倍的工作。它告诉你使用0dp以避免做(不必要的)工作。

修改

您的第二个问题layout_weight="1"是因为您Nested weights are bad for performance的权重和LinearLayout的权重 里面的TextView LinearLayout因此它们是“嵌套的”。警告告诉您以这种方式设置布局可能对性能不利。理想的修复方法可能是使用RelativeLayout来完成你想要的外观并且根本不使用重量。但实际上,除非你特别注意或听到性能不佳的报告,否则你可以放弃它。

答案 1 :(得分:1)

使用weight属性时,它会根据weight的值计算该视图的宽度。如果未将视图宽度设置为0dp,则会再次计算宽度,这是不必要的。因此,如果您使用weight,然后将宽度设置为0dp,则只需计算一次大小。


对于嵌套重量警告

android:layout_width="70dip"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_weight="1"

删除此linearlayout

中的权重属性