Android效能優——佈局優化

IMAlex233發表於2018-12-20

Android效能優——佈局優化

 

總結:提升UI的可複用性,減少巢狀,提高UI的渲染速度。

  1. RelativeLayout比LinearLayout要好
  2. Listview少用layout_weight屬性
  3. 利用include複用
  4. ViewStub隱藏不常用的控制元件
  5. merge減少巢狀層次,配合include天衣無縫

 

include標籤

  include標籤常用於將佈局中的公共部分提取出來,比如我們要在activity_main.xml中需要上述LinearLayout的資料,那麼就可以直接include進去了。


<include
    android:id="@+id/xixi"
    layout="@layout/support_item"/>

 

merge標籤:

   merge標籤是作為include標籤的一種輔助擴充套件來使用,它的主要作用是為了防止在引用佈局檔案時產生多餘的佈局巢狀。
  Android渲染需要消耗時間,佈局越複雜,效能就越差。如上述include標籤引入了之前的LinearLayout之後導致了介面多了一個層級。

 

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

    <TextView
        android:id="@+id/tv_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_title"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:layout_toRightOf="@+id/iv_image"
        android:text="這個是MergeLayout,這個是MergeLayout"
        android:textSize="12sp" />

</merge>

 

  activity_main就可以直接include了。

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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


</RelativeLayout>

 

viewstub標籤:

  viewstub是view的子類。他是一個輕量級View, 隱藏的,沒有尺寸的View。他可以用來在程式執行時簡單的填充佈局檔案。接著簡單試用下viewstub吧。首先修改activity_main.xml檔案如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <Button
        android:id="@+id/btn_view_show"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="顯示ViewStub"
        android:textAllCaps="false"
        android:layout_below="@+id/tv_content"/>



    <Button
        android:id="@+id/btn_view_hide"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="50dp"
        android:layout_toRightOf="@+id/btn_view_show"
        android:text="隱藏ViewStub"
        android:textAllCaps="false"
        android:layout_below="@+id/tv_content"/>



    <ViewStub
        android:id="@+id/vs_test"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout="@layout/item_test_linear_layout"
        android:layout_below="@+id/btn_view_show"
        android:layout_marginTop="10dp" />



</RelativeLayout>

 

 

相關文章