1

我想显示一个有组织的网格。所以我使用 LinearLayout 和 Layout Weight 选项,每件事都很完美,但我不明白如何在按钮 A 和按钮 C 中避免这个警告:

Nested weights are bad for performance

这是我的 XML 代码:

<?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="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <!-- First row. -->

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="horizontal"
            android:weightSum="2" >

            <Button
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="A" />

            <Button
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_marginTop="10dp"
                android:layout_weight="1"
                android:text="B" />
        </LinearLayout>

        <!-- Second row. -->

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="horizontal"
            android:weightSum="2" >

            <Button
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_marginTop="10dp"
                android:layout_weight="1"
                android:text="C" />

            <Button
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_marginTop="10dp"
                android:layout_weight="1"
                android:text="D" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

请问如何避免这个错误?

4

3 回答 3

21

如果要保留此布局,则只能忽略此警告。

添加到布局的根目录:xmlns:tools="http://schemas.android.com/tools". 然后在您的按钮中添加tools:ignore="NestedWeights".

这也可以在 Eclipse 中通过将光标放在黄线上并按 来完成ctrl + 1。你可以选择忽略。


如果要提高性能,可以使用 TableLayout

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/tableLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <TableRow
        android:id="@+id/tableRow1"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:padding="5dip" >

        <Button
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="A" />

        <Button
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_marginTop="10dp"
            android:layout_weight="1"
            android:text="B" />
    </TableRow>
    <TableRow
        android:id="@+id/tableRow2"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:padding="5dip" >
            <Button
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_marginTop="10dp"
                android:layout_weight="1"
                android:text="C" />

            <Button
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_marginTop="10dp"
                android:layout_weight="1"
                android:text="D" />
    </TableRow>
</TableLayout>
于 2013-10-28T13:48:21.900 回答
0

发生这种情况是因为您在渲染组件时可能会对性能产生影响,以适应布局以在父级中修复一个字母按钮以相应地修复按钮到 LinearLayout 的空间,只需删除layout_weightLinearLayout

于 2013-10-28T13:52:28.307 回答
0

避免此警告的一种方法是通过将外部替换LinearLayoutRelativeLayout.

我突然想到的另一件事是第一个孩子LinearLayout完全没有必要。它只有一个孩子(另一个LinearLayout),所以它并没有真正做任何事情。

使用 a RelativeLayout,您可以将此布局简化为:

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

    <LinearLayout
        android:id="@+id/row1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="2" >

        <Button
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="A" />

        <Button
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_marginTop="10dp"
            android:layout_weight="1"
            android:text="B" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/row2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_below="@+id/row1"
        android:weightSum="2" >

        <Button
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_marginTop="10dp"
            android:layout_weight="1"
            android:text="C" />

        <Button
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_marginTop="10dp"
            android:layout_weight="1"
            android:text="D" />
    </LinearLayout>

</RelativeLayout>
于 2013-10-28T13:55:57.297 回答