日拱一卒(二十)

4393 ワード

Androidレイアウトの最適化:
     (1)できるだけ多くの使用Relativelayout;----------Androidの携帯電話のハードウェアが多いため、Relativelayoutは柔軟で異なるandroidデバイスに適応することができます.
     (2)includeタグをできるだけ使用する;----------------------includeは、同じコンポーネントを抽出して、他のレイアウトで服用することができ、後期メンテナンスに有利である.
     (3)mergeを使用してレイアウトのネストを減らす----------mergeには2つの使用方法がある.
①xmlファイルのルートレイアウトはFrameLayoutです.たとえば、activityのレイアウトmain.xmlルートノードの親ノードがFrameLayoutであり、main.xmlのルートノードもFrameLayoutと言う場合、Framelayoutの代わりにmergeを使用してFramelayoutを1回減らすことができます.
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:background="@android:color/darker_gray"
    android:layout_height="match_parent" >

    <include layout="@layout/common_navitationbar" />

</merge>

②includeラベルで共通レイアウトをインポートする場合、親レイアウトと子レイアウトルートノードが同じタイプである場合.
まずincludeのレイアウトcommonを見てみましょう.navi_right.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="Ok"
        android:textColor="@android:color/black" />

</RelativeLayout>

しゅ
レイアウト:
common_navitationbar.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/white"
    android:padding="10dip" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="Back"
        android:textColor="@android:color/black" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Title"
        android:textColor="@android:color/black" />

    <include layout="@layout/common_center" />

</RelativeLayout>

見える
common_navitationbar.xmlのincludeの親ノードとincludeのルートノードはすべてRelativieLayoutで、これはincludeのRelativieLayoutをmergeに書き換えることができて、階層を減らすことができます:
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="Ok"
        android:textColor="@android:color/black" />

</merge>

     (4)
ラベルを使用して、一般的ではないレイアウトをロードします.
------------------
ViewStubはinflate()メソッドを呼び出したり、visibleを設定したりする前に、レイアウトスペースやシステムリソースを占有しません.≪ロード・インスタンス|Load Instance|emdw≫:ネットワークのタイムアウトを要求するレイアウト.
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:background="@android:color/darker_gray"
    android:layout_height="match_parent" >

    <include layout="@layout/common_navitationbar" />

    <ViewStub
        android:id="@+id/msg_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout="@layout/common_msg" />

</merge>

上記の例ではmsg_Layoutというレイアウトは,コードでinflate()を呼び出さなかったりvisibleを設定しなかったりした場合,空間を占有しない.
原文詳細アドレス