日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Android:一個(gè)高效的UI才是一個(gè)拉風(fēng)的UI(一)

開篇

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供興隆臺(tái)網(wǎng)站建設(shè)、興隆臺(tái)做網(wǎng)站、興隆臺(tái)網(wǎng)站設(shè)計(jì)、興隆臺(tái)網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、興隆臺(tái)企業(yè)網(wǎng)站模板建站服務(wù),十余年興隆臺(tái)做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

Android是一個(gè)運(yùn)行在移動(dòng)終端上的操作系統(tǒng),跟傳統(tǒng)PC最大的不同所在就是移動(dòng)終端的資源緊缺問(wèn)題“比較”明顯,當(dāng)然對(duì)于一些屌絲機(jī)型,應(yīng)該用“非?!皝?lái)形容才靠譜。所以經(jīng)常會(huì)出現(xiàn)在一些比較缺乏青春活力的老型機(jī)上,運(yùn)行一些軟件被異常終止的情況;然而作為互聯(lián)網(wǎng)廠家來(lái)說(shuō),廣大的屌絲機(jī)用戶肯定是一大筆用戶資源,這是能放棄的市場(chǎng)嗎?!當(dāng)然不行o(╯□╰)o,所以我們要盡可能得提高軟件的效率來(lái)贏取客戶的回眸一笑了,屌絲也是客戶!

這篇博客主要介紹如何在UI設(shè)計(jì)上提高效率,減少資源的利用,畢竟在終端資源短缺的今天,效率始終為王。我們?cè)u(píng)判一個(gè)UI界面不是認(rèn)為有多復(fù)雜才給力,或者說(shuō)有多炫才靠譜,一個(gè)簡(jiǎn)約而又不平凡的高效UI界面才是一個(gè)灰常牛逼的界面設(shè)計(jì)。

引入

在android應(yīng)用中,采用硬編碼方式編寫界面并不是一個(gè)提倡的方法。當(dāng)然硬編碼編寫的界面比基于XML文件的軟編碼界面高效靈活一些,但是非常不容易維護(hù),錯(cuò)綜復(fù)雜的代碼更會(huì)讓程序埋雷重重,說(shuō)不定哪天就把應(yīng)用炸的慘不忍睹。所以如果非常必要非??隙ㄒ捎么a編寫硬編碼界面之外,其他情況還是采用易于維護(hù)的XML來(lái)編寫比較好。

所以文中對(duì)于UI優(yōu)化設(shè)計(jì)歸結(jié)到底也就是對(duì)XML布局文件的優(yōu)化設(shè)計(jì)。

在谷歌給我們的開發(fā)環(huán)境中,存在這么一個(gè)非常好用的工具——hierarchyviewer,估計(jì)很多人都沒(méi)搭理過(guò)這個(gè)藏在偏僻角落的小工具吧;它能非常容易的幫我們分析UI界面的結(jié)構(gòu)和構(gòu)造效率,這個(gè)工具的位置就在sdk/tools/文件夾。

樓下上圖:

大家好,我是圖~

這是分析的是一個(gè)布局上只有一個(gè)TextView組件的XML界面,圖告訴我們,構(gòu)造這個(gè)界面總共用了四個(gè)組件,也就是需要繪制四次組件,自然每一次繪制組件都需要耗費(fèi)資源。

下面步入狂拽酷炫吊炸天的主題部分。。。。

盡量用最少的步驟完成布局

我是社會(huì)好青年,我為國(guó)家省資源;當(dāng)然作為組件來(lái)說(shuō)也需要這個(gè)覺(jué)悟,每個(gè)組件的繪制都會(huì)多多少少耗費(fèi)終端的資源。所以我們?cè)谶@里可不能聽老祖宗的話:韓信點(diǎn)兵多多益善了,精兵簡(jiǎn)政才是UI設(shè)計(jì)的唯一出路。不相信?行!下面就開始給個(gè)對(duì)比的例子。

這不簡(jiǎn)單嗎?幾行代碼不是分分鐘的事情嗎?

 
 
 
 
  1.     android:layout_width="wrap_content"
  2.     android:layout_height="wrap_content"
  3.     android:gravity="center" >
  4.     
  5.         android:id="@+id/button1"
  6.         android:layout_width="wrap_content"
  7.         android:layout_height="wrap_content"
  8.         android:background="@drawable/btn_backgroup"
  9.          />
  10.     
  11.         android:id="@+id/imageView1"
  12.         android:layout_width="wrap_content"
  13.         android:layout_height="wrap_content"
  14.         android:layout_alignParentLeft="true"
  15.         android:layout_centerVertical="true"
  16.         android:src="@drawable/header_back" />

也別急著看代碼,多累多傷眼睛呀,直接上個(gè)hierarchyviewer里面的圖來(lái)瞧瞧唄

一個(gè)小小的按鈕就用了3個(gè)組件來(lái)繪制,這就是3N的復(fù)雜度了呀,如果有5個(gè)這樣的按鈕就要15個(gè)組件,如果有10個(gè)按鈕就要有30個(gè),如果有N++個(gè),哎 呀媽的,不敢想象下去了。既然這樣,我們是不是應(yīng)該考慮一下優(yōu)化優(yōu)化,翻翻資料我們發(fā)現(xiàn)原來(lái)是可以不用這么多組件來(lái)實(shí)現(xiàn)的這個(gè)按鈕的。

 
 
 
 
  1. Button
  2.     android:id="@+id/button1"
  3.     android:layout_width="wrap_content"
  4.     android:layout_height="wrap_content"
  5.     android:background="@drawable/btn_backgroup"
  6.     android:drawableLeft="@drawable/header_back"
  7.     android:gravity="center"
  8.     android:padding="10dp"
  9.     />

還是原來(lái)的按鈕,還是原來(lái)的味道,復(fù)雜度從3N降低到N?。?!你敢說(shuō)這樣的效率你不想去提升????

小結(jié)一個(gè):在我們?cè)O(shè)計(jì)UI布局時(shí),應(yīng)該從使用盡量少的組件的前提下入手,由于系統(tǒng)組件的封裝比較完善,把多個(gè)簡(jiǎn)單的組件交由一個(gè)復(fù)雜一點(diǎn)的組件來(lái)實(shí)現(xiàn),是可以得到比較好的效率的。因?yàn)槊總€(gè)組件都得需要獨(dú)自進(jìn)行繪制過(guò)程,多個(gè)組件繪制浪費(fèi)的資源不僅僅謀害了我們的應(yīng)用,更深深打擊了用不起高端機(jī)的屌絲用戶的自尊心——”他媽的,這軟件又不能用!“。

你不干活?把你辭了。

我們還記剛開始給的一個(gè)圖嗎?我們?cè)诓季种惺褂玫牡絻H僅是一個(gè)TextView,而RelativeLayout貌似啥子活兒都沒(méi)干的樣子。。。。。。

我們從來(lái)都不提倡吃空餉不干活,軟件界的潛規(guī)則也是這樣的。出于構(gòu)建和諧社會(huì)的正義感,我們當(dāng)然不能坐視RelativeLayout這種站著茅坑不拉屎的流氓行為,所以我們就需要借助一個(gè)解決措施——標(biāo)簽,它能幫我們干掉一些不需要的根節(jié)點(diǎn)。為了擁有更好的即視感,所以我用了一個(gè)更為復(fù)雜點(diǎn)的布局(其實(shí)一點(diǎn)都不復(fù)雜)、、

主布局XML文件:

 
 
 
 
  1.     android:id="@+id/layout1"
  2.     android:layout_width="match_parent"
  3.     android:layout_height="match_parent"
  4.     >
  5.     
  6.         android:layout_width="match_parent"
  7.         android:layout_height="wrap_content"
  8.         android:src="@drawable/bg"
  9.         />
  10.     
  11.         android:id="@+id/layout2"
  12.         android:layout_width="match_parent"
  13.         android:layout_height="match_parent"
  14.         >
  15.     

組合控件布局XML文件:

 
 
 
 
  1.     android:layout_width="wrap_content"
  2.     android:layout_height="wrap_content"
  3.     android:orientation="horizontal"
  4.     >
  5.     
  6.         android:layout_width="wrap_content"
  7.         android:layout_height="wrap_content"
  8.         android:text="button2"
  9.         />
  10.     
  11.         android:layout_width="wrap_content"
  12.         android:layout_height="wrap_content"
  13.         android:text="text1"
  14.         android:textColor="#ff0000"
  15.         />

這個(gè)界面很丑的,不忍直視:

丑歸丑,我們還是需要繼續(xù)用神器hierarchyviewer看看這個(gè)XML生成的界面結(jié)構(gòu)圖來(lái)探索一下丑女內(nèi)心豐富多彩的世界~~~~~~~

我靠。。。。三個(gè)組件的布局竟然用了六層嵌套布局,瞬間有了一種大花姑娘嫁給老光棍的一種深深的浪費(fèi)感。我們開始看圖說(shuō)話,第一層和第二層的組件是系統(tǒng)都會(huì)自動(dòng)生成的,這個(gè)是板上釘釘沒(méi)法商量的事情,除非你去底層跟他們好好談?wù)?。但是~但是這個(gè)第三層的FrameLayout和第五層的LinearLayout完完全全是在自我秀存在感而已,所以我們要狠下心做掉他們,怎么來(lái)呢?用標(biāo)簽。

由于標(biāo)簽只能作為根元素,所以我們可以將這兩個(gè)根元素都稍加修改,如下:

主布局XML文件:

 
 
 
 
  1.     android:id="@+id/layout1"
  2.     android:layout_width="match_parent"
  3.     android:layout_height="match_parent"
  4.     >
  5.     
  6.         android:layout_width="match_parent"
  7.         android:layout_height="wrap_content"
  8.         android:src="@drawable/bg"
  9.         />
  10.     
  11.         android:id="@+id/layout2"
  12.         android:layout_width="match_parent"
  13.         android:layout_height="match_parent"
  14.         >
  15.     

組合控件布局XML文件:

 
 
 
 
  1.     android:layout_width="wrap_content"
  2.     android:layout_height="wrap_content"
  3.     >
  4.     
  5.         android:layout_width="wrap_content"
  6.         android:layout_height="wrap_content"
  7.         android:text="button2"
  8.         />
  9.     
  10.         android:layout_width="wrap_content"
  11.         android:layout_height="wrap_content"
  12.         android:text="text1"
  13.         android:textColor="#ff0000"
  14.         />

PS:注意需要在組合控件的類中加上一句setOrientation(LinearLayout.HORIZONTAL)來(lái)保證自組件的水平排列。

繼續(xù)用神器看看結(jié)構(gòu):

呼呼呼~~是不是從六層降低到了四層結(jié)構(gòu),好一股小清新的感覺(jué)呀,我都感覺(jué)飄飄然了,自然效率的提升是毋容置疑滴。。。。。

小結(jié)一個(gè):標(biāo)簽?zāi)馨俜职俅?FrameLayout>這個(gè)布局組件,對(duì)于不復(fù)雜的其他布局組件如線性布局等組合組件中,可以在繼承子類中對(duì)其屬性進(jìn)行設(shè)置后也可以使用標(biāo)簽,標(biāo)簽不占資源,自然在生成界面時(shí)也不會(huì)生成對(duì)應(yīng)的組件。另外需要注意一點(diǎn)是只能作為根元素,對(duì)于需要用inflate生成布局文件時(shí),必須指定一個(gè)ViewGroup作為其父元素,并且要設(shè)置inflate的attachToRoot參數(shù)為true。(參照inflate(int, ViewGroup, boolean))。

本文鏈接:http://www.cnblogs.com/net168/archive/2014/10/09/4004950.html


分享文章:Android:一個(gè)高效的UI才是一個(gè)拉風(fēng)的UI(一)
鏈接分享:http://m.5511xx.com/article/dhosoch.html