Android提升顯示佈局文件的性能,使用include標籤重用layouts

雖然 Android 提供不少小的可重用的交互組件,你仍然可能須要重用複雜一點的組件,這也許會用到 Layout。爲了高效重用整個的 Layout,你可使用 <include/> 和 <merge/> 標籤把其餘 Layout 嵌入當前 Layout。html

重用 Layout 很是強大,它讓你能夠建立複雜的可重用 Layout。好比,一個 yes/no 按鈕面板,或者帶有文字的自定義進度條。這也意味着,任何在多個 Layout 中重複出現的元素能夠被提取出來,被單獨管理,再添加到 Layout 中。因此,雖然能夠添加一個自定義 View 來實現單獨的 UI 組件,你能夠更簡單的直接重用某個 Layout 文件。android

建立可重用 Layoutapp

若是你已經知道你須要重用的 Layout,就先建立一個新的 XML 文件並定義 Layout 。好比,如下是一個來自 G-Kenya codelab 的 Layout,定義了一個須要添加到每一個 Activity 中的標題欄(titlebar.xml):性能

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width=」match_parent」
    android:layout_height="wrap_content"
    android:background="@color/titlebar_bg">

    <ImageView android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:src="@drawable/gafricalogo" />
</FrameLayout>

根節點 View 就是你想添加入的 Layout 類型。code

使用<include>標籤xml

使用 <include> 標籤,能夠在 Layout 中添加可重用的組件。好比,這裏有一個來自 G-Kenya codelab 的 Layout 須要包含上面的那個標題欄:htm

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width=」match_parent」
    android:layout_height=」match_parent」
    android:background="@color/app_bg"
    android:gravity="center_horizontal">

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

    <TextView android:layout_width=」match_parent」
              android:layout_height="wrap_content"
              android:text="@string/hello"
              android:padding="10dp" />

    ...

</LinearLayout>

你也能夠覆寫被添加的 Layout 的全部 Layout 參數(任何 android:layout_* 屬性),經過在 <include/> 中聲明他們來完成。好比:blog

<include android:id="@+id/news_title"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         layout="@layout/title"/>

然而,若是你要在 <include> 中覆寫某些屬性,你必須先覆寫 android:layout_height 和 android:layout_width。get

使用<merge>標籤string

<merge /> 標籤在你嵌套 Layout 時取消了 UI 層級中冗餘的 ViewGroup 。好比,若是你有一個 Layout 是一個豎直方向的 LinearLayout,其中包含兩個連續的 View 能夠在別的 Layout 中重用,那麼你會作一個 LinearLayout 來包含這兩個 View ,以便重用。不過,當使用一個 LinearLayout 做爲另外一個 LinearLayout 的根節點時,這種嵌套 LinearLayout 的方式除了減慢你的 UI 性能外沒有任何意義。

爲了不這種狀況,你能夠用 <merge> 元素來替代可重用 Layout 的根節點。例如:

<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/add"/>

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/delete"/>

</merge>

如今,當你要將這個 Layout 包含到另外一個 Layout 中時(而且使用了 <include/> 標籤),系統會忽略 <merge> 標籤,直接把兩個 Button 放到 Layout 中 <include> 的所在位置。

原文地址:http://www.apkbus.com/blog-927916-76589.html

相關文章
相關標籤/搜索