1. 程式人生 > >android 抽象佈局 三種佈局、、介紹

android 抽象佈局 三種佈局、、介紹

在佈局優化中,Androi的官方提到了這三種佈局<include />、<merge />、<ViewStub />,並介紹了這三種佈局各有的優勢,下面也是簡單說一下他們的優勢,以及怎麼使用,記下來權當做筆記。

1、佈局重用<include />

<include />標籤能夠重用佈局檔案,簡單的使用如下:

[html] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:orientation
    ="vertical"
  3.     android:layout_width=”match_parent”  
  4.     android:layout_height=”match_parent”  
  5.     android:background="@color/app_bg"
  6.     android:gravity="center_horizontal">
  7.     <includelayout="@layout/titlebar"/>
  8.     <TextViewandroid:layout_width=”match_parent”  
  9.               android:layout_height
    ="wrap_content"
  10.               android:text="@string/hello"
  11.               android:padding="10dp"/>
  12.     ...  
  13. </LinearLayout>

    1)<include />標籤可以使用單獨的layout屬性,這個也是必須使用的。

    2)可以使用其他屬性。<include />標籤若指定了ID屬性,而你的layout也定義了ID,則你的layoutID會被覆蓋,解決方案

    3)在include標籤中所有的都是有效的,前提是必須要寫layout_width

layout_height兩個屬性

    4)佈局中可以包含兩個相同的include標籤,引用時可以使用如下方法解決(參考):

[html] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. View bookmarks_container_2 = findViewById(R.id.bookmarks_favourite);   
  2. bookmarks_container_2.findViewById(R.id.bookmarks_list);  


2、減少檢視層級<merge />

    <merge/>標籤在UI的結構優化中起著非常重要的作用,它可以刪減多餘的層級,優化UI。<merge/>多用於替換FrameLayout或者當一個佈局包含另一個時,<merge/>標籤消除檢視層次結構中多餘的檢視組。例如你的主佈局檔案是垂直佈局,引入了一個垂直佈局的include,這是如果include佈局使用的LinearLayout就沒意義了,使用的話反而減慢你的UI表現。這時可以使用<merge/>標籤優化。

[html] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. <mergexmlns:android="http://schemas.android.com/apk/res/android">
  2.     <Button
  3.         android:layout_width="fill_parent"
  4.         android:layout_height="wrap_content"
  5.         android:text="@string/add"/>
  6.     <Button
  7.         android:layout_width="fill_parent"
  8.         android:layout_height="wrap_content"
  9.         android:text="@string/delete"/>
  10. </merge>

     現在,當你新增該佈局檔案時(使用<include />標籤),系統忽略<merge />節點並且直接新增兩個Button。更多<merge />介紹可以參考Android Layout Tricks #3: Optimize by merging

3、需要時使用<ViewStub />

    <ViewStub />標籤最大的優點是當你需要時才會載入,使用他並不會影響UI初始化時的效能。各種不常用的佈局想進度條、顯示錯誤訊息等可以使用<ViewStub />標籤,以減少記憶體使用量,加快渲染速度。<ViewStub />是一個不可見的,大小為0View。<ViewStub />標籤使用如下:

[html] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. <ViewStub
  2.     android:id="@+id/stub_import"
  3.     android:inflatedId="@+id/panel_import"
  4.     android:layout="@layout/progress_overlay"
  5.     android:layout_width="fill_parent"
  6.     android:layout_height="wrap_content"
  7.     android:layout_gravity="bottom"/>

當你想載入佈局時,可以使用下面其中一種方法:

[java] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. ((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);  
  2. // or
  3. View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();  

當呼叫inflate()函式的時候,ViewStub被引用的資源替代,並且返回引用的view這樣程式可以直接得到引用的view而不用再次呼叫函式findViewById()來查找了。
ViewStub目前有個缺陷就是還不支援 <merge /> 標籤。

相關推薦

android 抽象佈局 佈局介紹

在佈局優化中,Androi的官方提到了這三種佈局<include />、<merge />、<ViewStub />,並介紹了這三種佈局各有的優勢,下面也是簡單說一下他們的優勢,以及怎麼使用,記下來權當做筆記。 1、佈局重用<i

java swing 常用的佈局方式:邊界佈局佈局網格佈局管理器

作者:firstmiki 來源:firstmiki的部落格 著作權歸作者所有,轉載請聯絡作者獲得授權。 這篇博文僅僅簡單介紹了三種常見的佈局管理器,都是一些簡單應用; 一、 邊界佈局管理器(FlowLayout) /* * 功能:演示邊界佈局管理器:元件的位

LinearLayoutRelativeLayoutGridLayout目前安卓常用的佈局

          **LinearLayout、RelativeLayout、GridLayout安卓常用佈局**------------------------------------------

Java基本功練習十七GUI(圖形使用者介面基礎【基本概念及其使用佈局管理器實現同樣的框架練習】)

為Java GUI程式設計而設計的API是應用面向物件原理的絕佳範例。 本博文主要講解 第一,介紹Java GUI程式設計的基礎知識。 第二,它使用GUI演示面向物件程式設計。 尤其是將介紹Java GUI API的框架結構,討論GUI元件及元件之間的相互關係、容器和佈局管

用GsonFastJsonAndroid原生類方式做Json節點解析

一、用Gson做節點解析 json: {'flag':true,'data':{'name':'張三','age':18,'sex':true}} 步驟 : 獲得 解析者 JsonParser parser = new JsonParser(); 獲

android解析XML的方式 DOMSAXPULL

第一種DOM是全部解析出來,消耗記憶體空間 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

PHP連接MySQL數據庫的方式(mysqlmysqlipdo)

方式 odbc ram close 多語 utf 診斷 統一 連接數據庫 PHP與MySQL的連接有三種API接口,分別是:PHP的MySQL擴展 、PHP的mysqli擴展 、PHP數據對象(PDO) ,下面針對以上三種連接方式做下總結,以備在不同場景下選出最優方案。 P

解梯度下降法的形式BGDSGD以及MBGD

有一個 lis 一行 pri mbg 網絡 () 次數 pen 原帖地址:https://zhuanlan.zhihu.com/p/25765735           在應用機器學習算法時

day18--linux下gzipbzip2zipxz壓縮工具的介紹

gzip bzip2 zip xz 6.1:壓縮打包介紹:壓縮:節省空間,方便傳輸,帶寬資源耗費變少:常用的壓縮文件類型:windows: .rar .zip .7zlinux: .zip .gz .bz2 .xz .tar.gz .ta

day18--linux下gzipbzip2xz壓縮工具的介紹

gzip bzip2 zip xz 6.1:壓縮打包介紹:壓縮:節省空間,方便傳輸,帶寬資源耗費變少:常用的壓縮文件類型:windows: .rar .zip .7zlinux: .zip .gz .bz2 .xz .tar.gz .ta

安裝軟件包的方法yumrpm源碼安裝

rpm yum 一、軟件安裝方法1.rpm安裝rpm安裝軟件時不會自動安裝依賴2.yum安裝yum安裝軟件時會自動安裝軟件所需的依賴3.源碼安裝最難,需要編譯二、rpm介紹首先將之前的系統光驅掛載,mount /dev/cdrom /mnt/執行上面命令將iso掛載到/mnt/下ls /mnt/ c

梯度下降法的形式-BGDSGDMBGD

方法 ont -o 設置 求解 最小值 ima 求和 參數 在應用機器學習算法時,我們通常采用梯度下降法來對采用的算法進行訓練。其實,常用的梯度下降法還具體包含有三種不同的形式,它們也各自有著不同的優缺點。 下面我們以線性回歸算法來對三種梯度下降法進行比較。 一般線

Vmware虛擬機僅主機(Host-only)橋接(Bridge)NAT網絡模式介紹

主機ip 一個 選擇 17. def roc dcb 相互 兩個 Vmware虛擬機僅主機(Host-only)、橋接(Bridge)、NAT三種網絡模式介紹 給大家介紹一下虛擬機的三種網絡模式,希望能對大家有所幫助。 虛擬機在創建完成以後,會在物理主

Js函數的創建調用

end call 完成後 構造函數 三種 一個數 tom num yar 1 // 函數的三種創建方法 2 function one(){ // 函數聲明,不屬於任何對象,始終默認為全局對象 3 console.log("第一個函數") 4 //默認有

oracle中迴圈(ForWhileLoop)案例

1.ORACLE中的FOR迴圈用法(九九乘法表) 1 declare 2 i int:=0; 3 j int:=0; 4 begin 5 for i in 1..9 loop 6 for j in 1..i loop 7 Dbms_Output.p

【Linux】安裝軟體的方式--rpmyum原始碼包

說明:此文首發於本人原創公眾號【媛測】中,如有轉載,請著明出處! 在windows系統下安裝軟體很簡單,下載軟體包後雙擊.exe檔案,點選下一步即可。然而在linux安裝軟體就沒那麼容易了,不同的Linux發行版有所差異,下面以centos7系統為例說明,如何在linux下安裝軟體

移動端佈局

移動端佈局(三種):   1.固定佈局(廢棄用法)   2.百分比佈局,即流式佈局,特別適合電商網站的佈局   3.rem佈局方案,使用rem單位來做不同手機的適配,現在做手機端頁面是最好的     a.   em單位,相對的是font-size的大小          如果自身

[Machine Learning] 梯度下降法的形式BGDSGD以及MBGD

閱讀目錄   在應用機器學習演算法時,我們通常採用梯度下降法來對採用的演算法進行訓練。其實,常用的梯度下降法還具體包含有三種不同的形式,它們也各自有著不同的優缺點。   下面我們以線性迴歸演算法來對三種梯度下降法進行比較。   一般線性迴歸函式的假設函式為: h θ 

兩欄佈局方法(親測有效)

第一種: 只需要兩個div就能實現,主要原理是將第一個div設為浮動,並加上寬度,然後就可以實現兩欄佈局,並不需要設定第二個div的任何東西。程式碼如下: div{ height:500px; } #aside{

RecyclerView佈局管理器

import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; impo