1. 程式人生 > >Android裡merge和include標籤的使用及區別

Android裡merge和include標籤的使用及區別

1.使用 標籤來重用layout程式碼

如果在一個專案中需要用到相同的佈局設計,可以通過 標籤來重用layout程式碼,該標籤在Android開發文件中沒有相關的介紹。在android主屏程式中 用到了這個標籤:

<com.android.launcher.Workspace   
 android:id="@+id/workspace"    
 android:layout_width="fill_parent"    
 android:layout_height="fill_parent"    
 launcher:defaultScreen="1">    
  <include android:id="@+id/cell1"
layout="@layout/workspace_screen" /> <include android:id="@+id/cell2" layout="@layout/workspace_screen" /> <include android:id="@+id/cell3"layout="@layout/workspace_screen" /> </com.android.launcher.Workspace>

這樣可以多次引用一個佈局片段而不用重複的複製、貼上。通過include標籤也可以覆寫一些屬性的值,例如上面的示例就覆寫了引用的layout中的id值。下面是另外一個示例:

<include android:layout_width="fill_parent"layout="@layout/image_holder" />  
<include android:layout_width="256dip" layout="@layout/image_holder" />  

2.使用 標籤來減少檢視層級結構

在Android layout檔案中需要一個頂級容器來容納其他的元件,而不能直接放置多個元件,例如如下的程式碼:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="center" android:src="@drawable/golden_gate" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Golden Gate" /> </FrameLayout>

單獨將標籤做個介紹,是因為它在優化UI結構時起到很重要的作用。目的是通過刪減多餘或者額外的層級,從而優化整個Android Layout的結構。

3.將通過一個例子來了解這個標籤實際所產生的作用,這樣可以更直觀的瞭解的用法。

建立一個簡單的Layout,其中包含兩個Views元素:ImageView和TextView 預設狀態下我們將這兩個元素放在FrameLayout中。其效果是在主檢視中全屏顯示一張圖片,之後將標題顯示在圖片上,並位於檢視的下方。以下是xml程式碼:

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

    <ImageView  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"   

        android:scaleType="center"  
        android:src="@drawable/golden_gate" />  

    <TextView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginBottom="20dip"  
        android:layout_gravity="center_horizontal|bottom"  

        android:padding="12dip"  

        android:background="#AA000000"  
        android:textColor="#ffffffff"  

        android:text="Golden Gate" />  

</FrameLayout>  

在SDK目錄下tools資料夾下使用
tools> hierarchyviewer.bat工具檢視當前UI結構檢視:
這裡寫圖片描述
我們可以很明顯的看到出現了兩個framelayout節點,很明顯這兩個完全意義相同的節點造成了資源浪費(這裡可以提醒大家在開發工程中可以習慣性的通過hierarchyViewer檢視當前UI資源的分配情況),那麼如何才能解決這種問題呢(就當前例子是如何去掉多餘的frameLayout節點)?這時候就要用到標籤來處理類似的問題了。我們將上邊xml程式碼中的framLayout替換成merge:

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

    <ImageView  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"   

        android:scaleType="center"  
        android:src="@drawable/golden_gate" />  

    <TextView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginBottom="20dip"  
        android:layout_gravity="center_horizontal|bottom"  

        android:padding="12dip"  

        android:background="#AA000000"  
        android:textColor="#ffffffff"  

        android:text="Golden Gate" />  

</merge>  

這裡寫圖片描述

執行程式後在Emulator中顯示的效果是一樣的,可是通過hierarchyviewer檢視的UI結構是有變化的,當初多餘的FrameLayout節點被合併在一起了,或者可以理解為將merge標籤中的子集直接加到Activity的FrameLayout跟節點下(這裡需要提醒大家注意:所有的Activity檢視的根節點都是frameLayout)。如果你所建立的Layout並不是用framLayout作為根節點(而是應用LinerLayout等定義root標籤),就不能應用上邊的例子通過merge來優化UI結構。

相關推薦

Androidmergeinclude標籤的使用區別

1.使用 標籤來重用layout程式碼 如果在一個專案中需要用到相同的佈局設計,可以通過 標籤來重用layout程式碼,該標籤在Android開發文件中沒有相關的介紹。在android主屏程式中 用到了這個標籤: <com.android.laun

include指令include標籤區別

區別 類別 語法 發生作用時間 包含的內容 轉化成Servlet 編譯時間 執行時間 include指令 <%@ include file=””

android mergeinclude標籤混合使用

前面一篇部落格講了merge標籤的使用場景以及用法,這篇就講一下include的使用,但是include標籤說起來比較簡單,所以就結合起merge標籤 一起來講。 merge標籤之前說過了,所以就不說了。include標籤的作用在於使得佈局檔案變得可複用,比如你在不同的佈局

【原創】androidlayout_widthwidth的區別

【】剛接觸android,遇到xml裡的android:layout_width和android:width,覺得他們類似,但是有說不出有什麼區別,google後覺得說的都不太明白,遂自己試驗,成果如下: 概括的說,view中的layout_width形容的是本view和父容器的關係,比如button和包含

include指令include動作的區別

響應 而且 https 屬性方法 clu 目錄 轉換 jce 指向 include指令和include動作都能實現將外部文檔包含到JSP文檔中的功能,名稱也很相似,非常容易混淆。include指令和include動作到底有什麽分別,哪一種方式會更好呢?1.include指令

JSP中include指令include動作的區別

1.include指令 語法格式:<%@include file="檔案的URL" %> 2.include動作 語法格式: 1)<jsp:include page="檔案的URL"/> 2)<jsp:include page="檔案的URL

Templates中的macroinclude標籤

1.macro標籤 1.作用:相當於在模板中聲名函式  2.使用方法:   語法:{% macro 名稱(引數列表) %}        xxx      {% endmacro %} 建立 macro.html 模板檔案   -->  作用:定義專案中要用到的所

php中=====的含義區別

===比較兩個變數的值和型別;==比較兩個變數的值,不比較資料型別。 比如 $a = '123'; $b = 123;   $a === $b為假; $a == $b為真;   有些情況下不能使用==,可以使用===,比如:   <

【IOS】#import#include有什麼區別,@class呢,#import<>跟#import ""有什麼區別

1.#import是object-c匯入標頭檔案的關鍵字,#include是C/c++匯入標頭檔案的關鍵字,使用#import匯入標頭檔案會自動只匯入一次,不會重複匯入。 [email protected]是告訴編譯器某個類的宣告,當執行時,才會去檢視類的實現檔案,可以解決標頭檔案的相互包含。

Android MVC模式MVP模式的區別

方向 pre con 發生 rdquo str enter model view MVC模式:          1. MVC的所有通信都是單向的。     2. view傳送指令到controller(用戶也可以直接將指令傳到controller)。     3.

Anacondacanda簡介區別

Anaconda簡介: 1.是一個開源的Python發行版本,其包含了conda、Python等軟體包,numpy,pandas(資料分析),scipy等科學計算包,而無需再單獨下載配置. 可以在同一個機器上安裝不同的軟體版本(python版本)。Anaconda 的下載檔案比較大(約 531 MB),如果只

BaggingBoosting 概念區別

Bagging和Boosting都是將已有的分類或迴歸演算法通過一定方式組合起來,形成一個性能更加強大的分類器,更準確的說這是一種分類演算法的組裝方法。即將弱分類器組裝成強分類器的方法。 首先介紹Bootstraping,即自助法:它是一種有放回的抽樣方法(可能抽到重複

學習筆記:include指令include動作的區別 -- include動作forward動作比較

<%@ include file =".." ...%>和<jsp:include> 1、靜態引入jsp檔案:jsp指令元素 <%@ include file="檔案路徑" %> (等於是將兩個jsp合併為一個jsp,就是將A.jsp的程式碼複製到B.

請求轉發重定向 區別

LoginServlet: package com.test.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet

H5 table tr標籤td標籤區別

<tr> 標籤定義 HTML 表格中的行。 一個 <tr> 元素包含一個或多個 <th> 或 <td> 元素。 <td> 標籤定義 HTML 表格中的標準單元格。 HTML 表格有兩種單元格型別: 表

關於html中srchref使用區別

例子: <link href="" rel="stylesheet"> <script src="script.js"></script> <img src="image.jpg" alt="圖片無法顯示提示資訊"> href是Hy

Vue.js的computedwatch用法區別

1. 如何使用 1.1 computed計算屬性 <template> <div> <el-input v-model="value1" placeholder="費用1"></el-input>

Android外掛化熱修復的區別聯絡

【原文地址 點選開啟連結】(文章最後一部分內容) 外掛化框架: 此處輸入圖片的描述 外掛化發展歷史:部落格一部落格二 說到未來,也不得不提去年出來的ReactNative,RN比外掛化更輕量級,越來越多人選擇了RN,或許會代替外掛化,雖然還有很多缺點,比如說沒網的時候

Android 記憶體溢位記憶體洩漏的區別

 android記憶體管理 android應用層是由java開發的,android的davlik虛擬機器與jvm也類似,只不過它是基於暫存器的。在java中,通過new為物件分配記憶體,所有物件在java堆內分配空間;而記憶體的釋放是由垃圾收集器(GC)來回收的。 Ja

Android 圖片選擇拍照(剪輯)壓縮問題 工具類

圖片選擇和拍照在開發過程中,會遇到不少坑: 1.版本4.4以後選擇圖片後不會返回絕對路徑,但返回Uri,要再查詢一次 2.去剪輯時,設定了true的話直接返回bitmap,可能會很佔記憶體,有些機子會掛掉(OOM)或者不會返回 3.圖片未更好的壓縮,應該做到寬高比壓縮後