9

ピンコードを入力するための 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:background="#FF000000"
    android:orientation="vertical"
    android:weightSum="1" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_margin="5dp"
    android:layout_weight="0.2"
    android:background="@android:drawable/edit_text"
    android:gravity="center_vertical"
    android:orientation="horizontal" >

    <EditText
        android:id="@+id/pinDisplay"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="0.85"
        android:background="@null" />

    <ImageButton
        android:id="@+id/backspace"
        style="@android:style/Widget.Button"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_gravity="center_vertical"
        android:layout_margin="3dp"
        android:layout_weight="0.15"
        android:gravity="center"
        android:src="@android:drawable/ic_input_delete" />
</LinearLayout>

<!-- Keypad section -->

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="0.8"
    android:baselineAligned="false"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_marginLeft="5dip"
        android:layout_marginRight="4dip"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/one"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="1"
            android:textAppearance="@android:attr/text" />

        <Button
            android:id="@+id/two"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="2" />

        <Button
            android:id="@+id/three"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="3" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0sp"
        android:layout_marginLeft="5dip"
        android:layout_marginRight="4dip"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/four"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="4" />

        <Button
            android:id="@+id/five"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="5" />

        <Button
            android:id="@+id/six"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="6" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0sp"
        android:layout_marginLeft="5dip"
        android:layout_marginRight="4dip"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/seven"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="7" />

        <Button
            android:id="@+id/eight"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="8" />

        <Button
            android:id="@+id/nine"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="9" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0sp"
        android:layout_marginBottom="10dip"
        android:layout_marginLeft="5dip"
        android:layout_marginRight="4dip"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/ok"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:enabled="false"
            android:text="OK"
            android:textColor="#B8B8B8" />

        <Button
            android:id="@+id/zero"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="0" />

        <Button
            android:id="@+id/clear"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="Clear" />
    </LinearLayout>
  </LinearLayout>
</LinearLayout>

レイアウトは問題ありませんが、ネストされたウェイトに関する多くの Lint 警告が表示されます。

ネストされた重みはパフォーマンスに悪い

レイアウトの読み込みが遅くなったり、何かに気付いたりすることはありません。ネストされたウェイトを避けるにはどうすればよいですか? それともそのままにしておくべきでしょうか?

4

2 に答える 2

11

一般に、多数の LinearLayout をネストする代わりに 、 RelativeLayoutを使用するようにしてください。

ドキュメントから:

注: 1 つまたは複数のレイアウトを別のレイアウト内にネストして UI デザインを実現できますが、レイアウト階層をできるだけ浅く保つように努める必要があります。ネストされたレイアウトの数が少ないほど、レイアウトの描画が速くなります (ビュー階層が広いほど、ビュー階層が深いよりも優れています)。

しかし、今のように重みが必要な場合、RelativeLayoutはあまり役に立ちません。代わりに、ネストされたレイアウトの数を減らすために、キーパッドにTableLayoutを使用することをお勧めします。

于 2012-10-15T12:21:29.810 に答える
7

RelativeLayout を使用して、ネストされた重みを回避できます。

入れ子になった重みは、入れ子になるたびに測定値の数が指数関数的に増加するため、パフォーマンスが低下します。

于 2012-10-15T12:14:57.620 に答える