-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
app頁面布局優(yōu)化建議
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于app頁面布局優(yōu)化建議的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、頁面布局方案
例如:對于DPR=2的Retina屏幕而言1個位圖像素對應(yīng)于4個物理像素,由于單一位圖像素不可再分割,所以只能就近取色,從而導(dǎo)致圖片模糊。所以對于圖片清晰度問題,較好的方案是提供兩倍圖 @x2 。
像素密度表示設(shè)備屏幕能夠顯示的設(shè)備獨立像素DIP的數(shù)量,屏幕顯示的像素數(shù)量越多畫面也就越精細,同時同樣屏幕區(qū)域能夠顯示的信息也就越多。
屏幕由像素點組成,每個像素點發(fā)出不同顏色的光,進而構(gòu)成界面。而屏幕的物理尺寸與像素尺寸是不成比例的。不同尺寸的手機屏幕擁有不同的分辨率,分辨率實際上是手機像素的寬高尺寸。
像素密度(pixels per inch,PPI或DPI)表示每英寸長度上排列的設(shè)備獨立像素點DIP的個數(shù),1英寸等于2.53厘米。像素密度PPI越高則表示屏幕分辨率越高進而屏幕顯示越精細。Retine屏幕比普通屏幕清晰的原因,是因為它的像素密度是普通屏幕的數(shù)倍。
例如:3.5英寸的iPhone手機屏幕
日常所說的屏幕尺寸,實際是指屏幕對角線的長度。計算像素密度首先需要計算設(shè)備屏幕對角線等效像素,然后除以對角線長度。例如HTC G7分辨率為480x800,3.7英寸,計算出像素密度為252PPI。
像素密度PPI = 平方像素寬加平方像素高之和開平方的結(jié)果,再除以屏幕對角線的英寸數(shù)。
密度決定比例
通過計算像素密度PPI可以得知設(shè)備屏幕屬于哪個密度區(qū)間,因為不同密度區(qū)間對應(yīng)著不同的默認縮放比例。
通俗來說視區(qū) Viewport 就是瀏覽器上用來顯示頁面的區(qū)域,也就是說,瀏覽器的實際寬度和手機寬度不一樣,無論手機寬度是320px或640px,在手機瀏覽器內(nèi)部寬度始終會是瀏覽器本身的視區(qū)。
現(xiàn)代瀏覽器都會給自身的視區(qū)提供一個默認值,大多會以980px或1024px為主。在移動端視區(qū)默認一般來說是會大于手機屏幕的,所以當(dāng)在桌面瀏覽器正常顯示的頁面,會以960px設(shè)計主區(qū)域。放到移動端就會出現(xiàn)橫向滾動條,因此會專門會給瀏覽器設(shè)計移動端的頁面。
移動端瀏覽器會將頁面放在一個虛擬的窗口 viewport 中,通常這個虛擬的窗口會比屏幕寬,這樣就不用將每個頁面擠到很小的窗口中,以防止破壞沒有針對手機瀏覽器優(yōu)化的網(wǎng)頁布局,用戶可以通過平移或縮放來查看頁面中的不同部分。
頁面中視區(qū) viewport 是可繪制的區(qū)域,雖然視區(qū)的可視面積和屏幕尺寸相匹配,但視區(qū)頁由自己的尺寸,用來確定頁面中的像素數(shù)量。
在 iPhone 和 Android 平臺中 WebKit 內(nèi)核的歷覽器使用980像素寬的視見區(qū)或邏輯尺寸,相當(dāng)于viewport中的width=980px。當(dāng)頁面加載后,頁面內(nèi)容通常被完全縮放以便整個頁面都可見,盡管內(nèi)容會被縮放的非常小且不可讀。
在Web頁面中,可通過JS動態(tài)獲取相關(guān)參數(shù)。
根據(jù)目前市場主流移動終端,統(tǒng)計設(shè)備獨立像素后,移動端H5設(shè)計稿推薦尺寸為640 x 1136、750 x 1334。
除去瀏覽器全屏顯示,幾乎所有情況下均會存在頂部狀態(tài)欄和導(dǎo)航欄。根據(jù)iPhone標準,狀態(tài)欄和導(dǎo)航欄的獨立像素高度分別為40px和88px。Android平臺可以更改狀態(tài)和導(dǎo)航欄高度可取默認值48px和100px為準。在網(wǎng)頁中就會將頁面內(nèi)容向下擠入盲區(qū),根據(jù)不同的布局方式可能會擠出視口,也就是可視區(qū)域之下。因此取兩個平臺的最大值148。因此設(shè)計稿要盡量保證單頁下沒有重要內(nèi)容。如果要在所有屏幕上將重要內(nèi)容顯示完全,需要注意市面上存在的小尺寸屏幕,絕對部分智能機分辨率在640 x 960之上,因此只要重要內(nèi)容放在盲區(qū)之上即可。計算出的最安全高度為812 = 960 - 148。
簡單來說視區(qū) Viewport 是嚴格等于瀏覽器的窗口,在桌面瀏覽器中視區(qū)就是瀏覽器窗口的寬高,但在移動設(shè)備上由于視區(qū)太窄,為了更好的為 CSS 布局服務(wù),所以提供了兩個視區(qū),分別是可見視區(qū) Visual Viewport 和布局視區(qū) Layout Viewport 。
如果將移動設(shè)備瀏覽器的可視區(qū)域設(shè)置為Viewport,某些網(wǎng)站會因為Viewport太窄而顯示錯亂,所以瀏覽器會默認將Viewport設(shè)置為一個較寬的值,比如980px,使得為桌面瀏覽器設(shè)計的網(wǎng)站也能在移動設(shè)備瀏覽器上正常顯示。這個瀏覽器默認的Viewport也就是Layout Viewport布局視區(qū)。布局視區(qū)的寬度可以使用JavaScript的 document.documentElement.clientWidth 獲取。移動設(shè)備中默認的視區(qū)就是Layout Viewport。
布局視區(qū)的寬度是大于瀏覽器可視區(qū)域的寬度的,因此需要一個Viewport來表示瀏覽器可視區(qū)域大小,這個Viewport也就是可見視區(qū)Visual Viewport,可見視區(qū)可使用JavaScript的 document.documentElement.innerWidth 獲取。
Ideal Viewport是一個能完美適配移動設(shè)備的Viewport,首先無需縮放和橫向滾動條就能正常查看頁面所有內(nèi)容,其次顯示的文字、圖片大小合適。比如14px的文本不會因為一個高密度像素的屏幕而顯示的太小或無法看清。無論在何種密度屏幕、何種分辨率下,顯示出來的大小都差不多,這個Viewport也就是Ideal Viewport。
Ideal Viewport并沒有一個固定的尺寸,不同的設(shè)備擁有不同的尺寸。比如在IPhone設(shè)備中Ideal Viewport寬度是320px,無論屏幕寬度是320還是640的。Ideal Viewport的意義在于,無論在何種分辨率下,針對Ideal Viewport而設(shè)計的頁面無需縮放和橫向滾動條都可以完美地呈現(xiàn)給用戶。
移動設(shè)備中默認的視區(qū)是Layout Viewport,在進行移動設(shè)備頁面開發(fā)時則需要Ideal Viewport。要得到完美視區(qū),需設(shè)置 meta 標簽。
該 meta 標簽的作用是讓當(dāng)前視區(qū)寬度等于設(shè)備寬度,同時不允許用戶手動縮放。 minimum-scale=1.0 與 maximum-scale=1.0 并不是必需的。但 width = device-width 則是必須的,以保證不會出現(xiàn)橫向滾動條。
width 能夠控制默認布局視區(qū)Layout Viewport的寬度,若不指定則默認會是980px或1024px,這個值會由設(shè)備自身所決定。當(dāng)把布局視區(qū)寬度設(shè)置為移動設(shè)備寬度 width = device-width 時,此時布局視區(qū)將會變成完美視區(qū)。
其實要將當(dāng)前視區(qū)寬度設(shè)置為完美視區(qū)寬度,既可以設(shè)置 width = device-width 也可以設(shè)置 initial-scale = 1.0 ,但是單單設(shè)置 width = device-width 會導(dǎo)致iPhone、iPad設(shè)備中橫豎屏不分,單單設(shè)置 initial-scale = 1.0 則會導(dǎo)致IE中橫豎屏不分。所以都以豎屏的完美視口寬度為標準,最完美的寫法時兩則都寫上去, width = device-width 解決iPhone、iPad缺陷, initial-scale = 1.0 則解決IE的缺陷。
CSS3新增視區(qū)單位vm和vh,在移動端iOS8+和Android4.4+獲得支持。
設(shè)備像素比定義了物理像素與設(shè)備獨立像素之間的對應(yīng)關(guān)系,計算公式為:設(shè)備像素比 = 物理像素 / 設(shè)備獨立像素。
在CSS中可通過以下方式進行媒體查詢,針對不同DPR設(shè)備做出樣式適配。
在JavaScript中可通過 window.devicePixelRatio 獲取當(dāng)前設(shè)備的DPR。
在Ratina高清設(shè)備屏幕中一個CSS像素對應(yīng)4個物理像素
Web頁面設(shè)置視口后,頁面與屏幕是1:1顯示,移動設(shè)備都具有設(shè)備像素比 DPR ,當(dāng)DPR=2時移動設(shè)備上的一個CSS像素由4個物理像素點組成。
安卓客戶端限制了 viewport 設(shè)置的縮放屬性,讓客戶端放開限制就行,但是由于市場上的app版本還是不支持,所以需要做兼容性處理。
iPhone6 上有1px 的滾動條,最后處理方案是通過 viewport 中的 maximum-scale 的值加了0.1,由于設(shè)置了user-scalable=no,maximum-scale 的值加0.1并不會有什么影響。
通過JS動態(tài)獲取移動設(shè)備的設(shè)備像素比,通過設(shè)備像素比來計算并設(shè)備Web頁面中 html 標簽的字體大小 font-size 以及縮放比例。
例如:動態(tài)設(shè)置 html 的font-size, 同時根據(jù)設(shè)備DPR調(diào)整頁面的縮放值,進而達到高清效果。
rem 全稱 font size of the root element 是指相對于根元素的字體大小的相對單位,計算規(guī)則依賴于根元素。
rem 是通過根元素進行適配的,web中根元素是指 html ,所以通過設(shè)置 html 的字體大小即可控制 rem 的大小。
REM布局的核心是設(shè)置好根 html 元素的字體大小 font-size ,為了防止在高清屏下像素不夠用而導(dǎo)致模糊,當(dāng)拿到移動設(shè)計稿時,移動設(shè)計稿一般會以iPhone5設(shè)備寬320px或iPhone6設(shè)備寬375px為基準,制作出兩倍寬的設(shè)計稿,即640px或750px。
例如:設(shè)置 html 標簽的 font-size:10px ,6rem即6*10px。
rem 適用于WebApp,出于兼容性考慮,WebApp下使用 rem 更加能凸價值和功能。
使用CSS的媒體查詢控制
移動UI設(shè)計稿會采用iPhone寬度作為標準
使用JS控制Web頁面文字大小使其自適應(yīng)屏幕
使用 rem 布局的本質(zhì)是等比縮放,一般是基于寬度。
將屏幕寬度均分100份,每一份的寬度使用x表示,即x=屏幕寬度/100,如果將x作為單位,x前面的數(shù)值代表屏幕寬度的百分比。想要屏幕元素隨著屏幕寬度等比縮放,只需要確定x單位,可通過CSS3中的 rem 來實現(xiàn)。可通過JS設(shè)置HTML字體大小等于屏幕寬度的百分之一。
若UE設(shè)計稿寬度尺寸為640px,設(shè)計稿中某元素寬度為100px,則可以計算出100 / 640px * 100px = 15.625。
最佳實踐:px2rem移動端自適應(yīng)方案 https://github.com/imochen/hotcss
字體大小不能使用 rem ,因為字體大小和字體寬度并不是線性關(guān)系,所以字體大小不能使用 rem 。由于設(shè)置根元素字體大小會影響所有沒有設(shè)置字體大小的元素,因為字體大小是會繼承的,可以在 body 上做字體修正。
如何實現(xiàn)字體的響應(yīng)式,可通過修改 body 字體大小,同時設(shè)置字體大小使用 em 單位。
二、9種常見的移動端產(chǎn)品信息布局方式
某天,經(jīng)理在工作討論組發(fā)了2張App的界面截圖,問:“你們喜歡哪一種布局方式?”這兩個界面,一個是九宮格式,一個是普通列表式。
一時間,大家沒法快速下定論。視覺設(shè)計師發(fā)言,“得看具體場景和需求來判定?!?/p>
有程序員同事打趣說,“哈哈,說了跟沒說一樣。”接著,陸續(xù)有人發(fā)表了自己看法,除了說到這2種方式各自的優(yōu)劣,總結(jié)起來還是那句話——得看設(shè)計的目標是什么,綜合多方面來考慮,沒有絕對的好與壞,只有相對的合適與否。
在看過已有的關(guān)于App界面信息布局方式的一些資料后,我自己調(diào)整了一下,重新總結(jié)一下。從視覺和交互表現(xiàn)來說,常見的移動端產(chǎn)品界面信息布局方式,大致有以下 9 種。
一、列表式
列表式為豎向排列,每個信息單元有相同的結(jié)構(gòu)。
優(yōu)點:
符合人們從上往下閱讀的習(xí)慣,順暢快捷,瀏覽體驗比較好。
因為有統(tǒng)一的信息單元格式,頁面整體比較整潔、清晰。
每個信息單元根據(jù)需要可放置標題、摘要、圖片、標簽等元素,供用戶預(yù)覽并預(yù)測詳細內(nèi)容。
缺點:
當(dāng)信息加載多了以后,容易讓人出現(xiàn)審美疲勞,降低閱覽興趣。
信息排序越往后,受到的關(guān)注度自然會下降。一般采用顏色不同、字號大小、區(qū)塊劃分等來區(qū)分重要級別,增強層次感。
類似于列表式,有些演化出像卡片的排版,或者一個區(qū)塊劃分為左右2半(如下例子所示),成為2個入口,都是根據(jù)界面面積利用和設(shè)計目標等方面來考慮的。
二、橫向排列式
與豎向排列相對應(yīng),信息單元也可以是橫向排列。在交互操作上,這種方式需要左右滑動來切換信息單元,又稱“旋轉(zhuǎn)木馬式”。
舉例:下圖中[新書搶鮮]模塊的布局方式
優(yōu)點:
縮小在高度上占據(jù)的空間,利于界面其他信息的展示。
當(dāng)信息單元占據(jù)的幅度較大時(例如圖片類應(yīng)用),有利于用戶目光聚焦。
缺點:
左右滑動的交互有時候不方便。
當(dāng)信息單元面積較大時,無法跳躍性定位到想看的信息單元,只能一個一個左右切換,直到切換到想看的那個為止。
因為操作不方便,可能有些內(nèi)容會被遺漏,或者用戶沒興致去翻看。
三、九宮格式
嚴格意義上的九宮格是3行3列,如果列數(shù)或行數(shù)增加,我們暫且都泛稱為九宮格式(也有人將它們區(qū)分開來,稱之為“陳列館式”或“網(wǎng)格式”)
優(yōu)點:
節(jié)省空間,一行可以放置多個入口。
清晰明朗、簡潔。一般會突出icon圖標,便于記憶和查找。
缺點:
因為空間有限,不能放置太多次級預(yù)覽內(nèi)容。
當(dāng)入口過多時,也不利于辨識和查找。
四、選項卡式
也稱為“tab式”,通過對當(dāng)前界面的信息屬性進行劃分歸類,分為多個選項,用戶切換即可。App的主導(dǎo)航一般也是用tab的方式切換。
如下圖:消息頁面分為4個選項卡
優(yōu)點:
不用來回跳轉(zhuǎn)頁面層級,只需要在當(dāng)前頁面一鍵切換即可看到不同內(nèi)容,方便。
用戶清楚地知道自己當(dāng)前所在位置。
缺點:
選項卡數(shù)量超過5個就會顯得笨重,如果一行放置不下,需要左右滑動才能顯示完所有選項卡,會降低操作便捷性。
五、多面板式
對于分類比較多,每個類別囊括的內(nèi)容也多的情況下,可用多個面板的形式來展示。
優(yōu)點:
可以清楚地知道當(dāng)前在哪個位置。
當(dāng)前界面容納多個入口,同級別之間切換,不需要在不同層級的頁面來回切換,比較方便。
缺點:
面板獨占一列空間,整個界面顯得比較擁擠。
六、手風(fēng)琴式
這種方式也有人稱為“行為擴展式”。它是在當(dāng)前界面點擊一級信息,展開二級信息的方式,點擊時再展開,再點擊可縮回,有點類似手風(fēng)琴縮展的動作。
優(yōu)點:
只需要在當(dāng)前頁展開二級信息,不需要跳轉(zhuǎn)頁面,操作比較方便,也有利于用戶認知信息的架構(gòu)。
缺點:
當(dāng)信息分類過多且需要手動再點擊才能收回二級信息時,全部展開后,不利于跨分類跳轉(zhuǎn)。
七、圖表式
通過圖表和內(nèi)容的結(jié)合來展示。
優(yōu)點:
圖表比較直觀,表現(xiàn)力更強。
缺點:
占據(jù)面積較大,整體界面能承載的信息不夠多。
如果圖形和交互動作結(jié)合,大多數(shù)用戶可能發(fā)現(xiàn)不了這些交互。
八、抽屜式
抽屜式適用于隱藏次要功能,讓產(chǎn)品突出核心功能。當(dāng)用戶需要查找某個功能入口時,通過點擊抽屜,在“抽屜”里面進行查找。
優(yōu)點:
可幫助隱藏一些功能入口,讓產(chǎn)品更簡約。
缺點:
用戶第一次使用時,因為可見性被減弱,有些功能用戶找不到,提高了他們的使用成本。
如果用戶常用的功能被放置在抽屜里,則增加了用戶操作的步驟。
九、標簽式
標簽式,顧名思義,就是通過標簽設(shè)置的方法,把信息進行分類對應(yīng)為一個個標簽,或者標簽直接作為功能入口(如“熱門搜索”),便于用戶操作。
優(yōu)點:
清晰簡潔,占據(jù)空間少。
便于切換查看對應(yīng)的內(nèi)容,用戶清楚自己在哪個分類。
缺點:
標簽不宜過多,不利于查找。
小結(jié)
移動端的產(chǎn)品形式越來越多樣化,人們總是期望隨時隨地可以在移動端快速獲取自己想要的信息,因為硬件規(guī)格的限制,如何在有限的空間和用戶耐心中爭奪用戶的注意力,隱含了諸多產(chǎn)品設(shè)計的學(xué)問。
以上9種常見移動端信息布局方式,只是很淺層的總結(jié),任何一種方式都沒有絕對的優(yōu)劣,不同方式可以互相組合、鑲嵌使用,在具體設(shè)計時,需要根據(jù)實際情況來思考,在不斷優(yōu)化中找到最合適最有效的方案。
三、App中列表、卡片和雙欄卡片的布局思考
各布局形式的特點
列表的布局常見于新聞類App。其布局形式的特點在于能夠在較小的屏幕中顯示多條信息,用戶通過上下滑動的手勢能獲得大量的信息反饋。而列表也是一種非常容易理解的展示形式。
卡片式布局常見于微博、Facebook等社交類App,也出現(xiàn)于其他不同類的App中,形式非常靈活。其特點在于,每張卡片的內(nèi)容和形式都可以相互獨立,互不干擾,所以可以在同一個頁面中出現(xiàn)不同的卡片承載不同的內(nèi)容。而由于每張卡片都是獨立存在的,其信息量可以相對列表更加豐富,而且可以讓用戶對其進行評論、點贊等等操作、省去了跳轉(zhuǎn)到詳情頁面的步驟。但由于卡片的信息很多,在小屏幕上并不能顯示多個卡片,一屏內(nèi)卡片數(shù)很少會超過3個。
而雙欄卡片的布局形式,比較常見于以圖片信息為主導(dǎo)的App。例如Pinterest,一些商城的商品陳列頁面。這種形式與卡片式類似,但它能在一屏里顯示更多的內(nèi)容,至少4張卡片。同時,由于分開左右兩欄的顯示,用戶可以更加方便地對比左右兩欄卡片的內(nèi)容。
布局背后的行為邏輯
然而,為什么新聞類的多采用列表,社交類多采用卡片,圖片類多采用雙欄卡片?
我們回歸到用戶需求和行為模式來思考這個問題。
當(dāng)我們在瀏覽新聞的時候,我們的需求是什么?大部分人的需求都是,一方面想要知道最近發(fā)生的一些事情,這是量的需求;另一方面,想要深入了解這一事情是什么,這是深度閱讀的需求。而量的需求往往具有先行性,深度閱讀是在其后的。基于這樣的需求,用戶在瀏覽新聞時候的行為模式大概如下:快速大量瀏覽→篩選→判斷→快速大量瀏覽,如下:
由上圖看出,用戶在瀏覽新聞時,需要快速地處理大量的信息,而且高頻地在極短時間內(nèi)進行決策。因此,高效性就極為重要,假如在一屏中只顯示一兩條信息顯然是不合適的。除此之外,展示形式的高度一致性和對展示內(nèi)容的信息量進行嚴格控制也及其重要。高度一致性可以讓用戶快速理解展示形式,從而能自主選擇自己想要的內(nèi)容,便于篩選和判斷。控制信息量能減少信息干擾,從而提高效率。由于這樣的限制,列表就成為了新聞?wù)故镜暮侠硇问健?/p>
同理,在用Pinterest時,我們究竟是想要什么?是找到最適合的圖片。最適合,就會存在唯一性,就會有對比,取舍,選擇。這也意味著,用戶不是一張張按順序瀏覽,而是反復(fù)地對比瀏覽,如下圖:
基于這樣的行為模式,要求布局形式:1.在一屏能內(nèi)能展示足夠多的內(nèi)容;2.能讓用戶方便地對比內(nèi)容。同時,對內(nèi)容本身也有要求:1.內(nèi)容本身是能被快速理解。2.內(nèi)容本身具有可比性。
以廚房故事為例,這是一個款學(xué)習(xí)西餐的App,跟Pinterest毫無關(guān)聯(lián),卻用著同樣的布局。除了視覺美觀這樣感性的解釋之外,我們可以從別的角度來理解。
假設(shè)這樣一個場景,飯點到了,今天我想吃吃西餐,所以打開了每日廚房,挑其中一款來作為今晚的晚餐。因為,可能我這周就做這么一頓西餐,所以這次的選擇必須精挑細選,既要好吃,還要顏值高,更要操作簡單。在每日廚房的首屏中展示了各種成品的圖片,這很好,我可以通過比較顏值來挑選我想要的。還有每款菜的收藏數(shù),這大概能體現(xiàn)這款菜的綜合評價,這也幫助我降低了選擇的難度。很快,經(jīng)過幾番的對比,我最終選擇了肉醬意面作為今晚的晚餐...
由以上場景可以說明,用戶在使用這款A(yù)pp時,由于只能選擇一次,所以他不得不對比內(nèi)容。同時,易于理解的圖片和數(shù)據(jù)促成了對比這一行為。所以,雙欄卡片這樣的布局是一個很好的承載方式。
以同樣的思路,當(dāng)我們在刷微博的時候,我們的需求又是什么?更加便捷地跟好友或者是關(guān)注的人進行互動。而進行互動的前提是,要對內(nèi)容進行理解性地閱讀,而不是快速地跳讀。所以在瀏覽好友動態(tài)時的行為模型應(yīng)該如下:
上圖說明,在展示形式至少要滿足2個條件。第一,需要承載致少兩個緯度的信息,一是讓用戶理解的內(nèi)容信息,二是讓用戶互動的操作信息;第二,在當(dāng)前頁用戶可以對內(nèi)容進行操作,甚至能在當(dāng)前頁把操作完成。然而,這還不能完全說明卡片式的布局是最合理的。這需要把微博內(nèi)容的易理解性,信息的復(fù)雜度等因素綜合考慮,卡片式的布局是一個比較好的解決方案。
由于卡片式的設(shè)計形式非常多樣和靈活,適用范圍也極為廣泛。且不在這里作深入的探討。
總結(jié)
結(jié)合各布局形式的特點和背后的行為邏輯,我們可以得出以下結(jié)論:
當(dāng)用戶的行為模式更傾向于高效,迅速地篩選信息,列表是一個非常好的選擇。
當(dāng)用戶的行為需要反復(fù)對比信息,或者需要在單屏內(nèi)獲得更多信息,可以嘗試用雙欄卡片式布局。
當(dāng)用戶不僅僅需要消費所展示的內(nèi)容,更愿意地對其內(nèi)容進行互動,那么卡片式的布局可以優(yōu)先考慮。
最后反思
本文僅僅是通過個布局形式的特點和背后的行為邏輯去思考布局的適用范圍,顯然,這種單一維度的思考,在實際案例中是不合適的。除了用戶的行為模式意外,需要考慮到的因素可以有:
1.各布局形式視覺流特點(列表是自上而下的"I"型視覺流,雙欄卡片是上下左右跳動的"z"型視覺流)
2.信息傳達的優(yōu)先性(列表更適用于文字傳達,卡片式更適合圖片傳達)
3.布局的可延展性
4.對品牌的塑造性
5.等等
而針對每個場景,每個App,每個頁面,每個考慮因素的比重也是不一樣的,這需要具體問題問題具體分析。但無論怎樣,設(shè)計的結(jié)果可以千變?nèi)f化,但設(shè)計背后的邏輯必須是可以追本溯源的。
四、Android性能優(yōu)化總結(jié)
常用的Android性能優(yōu)化方法:
一、布局優(yōu)化:
1)盡量減少布局文件的層級。
層級少了,繪制的工作量也就少了,性能自然提高。
2)布局重用 <include標簽>
3)按需加載:使用ViewStub,它繼承自View,一種輕量級控件,本身不參與任何的布局和繪制過程。他的layout參數(shù)里添加一個替換的布局文件,當(dāng)它通過setVisibility或者inflate方法加載后,它就會被內(nèi)部布局替換掉。
二、繪制優(yōu)化:
基于onDraw會被調(diào)用多次,該方法內(nèi)要避免兩類操作:
1)創(chuàng)建新的局部對象,導(dǎo)致大量垃圾對象的產(chǎn)生,從而導(dǎo)致頻繁的gc,降低程序的執(zhí)行效率。
2)不要做耗時操作,搶CPU時間片,造成繪制很卡不流暢。
三、內(nèi)存泄漏優(yōu)化:
1)靜態(tài)變量導(dǎo)致內(nèi)存泄漏 比較明顯
2)單例模式導(dǎo)致的內(nèi)存泄漏 單例無法被垃圾回收,它持有的任何對象的引用都會導(dǎo)致該對象不會被gc。
3)屬性動畫導(dǎo)致內(nèi)存泄漏 無限循環(huán)動畫,在activity中播放,但是onDestroy時沒有停止的話,動畫會一直播放下去,view被動畫持有,activity又被view持有,導(dǎo)致activity無法被回收。
四、響應(yīng)速度優(yōu)化:
1)避免在主線程做耗時操作 包括四大組件,因為四大組件都是運行在主線程的。
2)把一些創(chuàng)建大量對象等的初始化工作放在頁面回到前臺之后,而不應(yīng)該放到創(chuàng)建的時候。
五、ListView的優(yōu)化:
1)使用convertView,走listView子View回收的一套:RecycleBin 機制
主要是維護了兩個數(shù)組,一個是mActiveViews,當(dāng)前可見的view,一個是mScrapViews,當(dāng)前不可見的view。當(dāng)觸摸ListView并向上滑動時,ListView上部的一些OnScreen的View位置上移,并移除了ListView的屏幕范圍,此時這些OnScreen的View就變得不可見了,不可見的View叫做OffScreen的View,即這些View已經(jīng)不在屏幕可見范圍內(nèi)了,也可以叫做ScrapView,Scrap表示廢棄的意思,ScrapView的意思是這些OffScreen的View不再處于可以交互的Active狀態(tài)了。ListView會把那些ScrapView(即OffScreen的View)刪除,這樣就不用繪制這些本來就不可見的View了,同時,ListView會把這些刪除的ScrapView放入到RecycleBin中存起來,就像把暫時無用的資源放到回收站一樣。
當(dāng)ListView的底部需要顯示新的View的時候,會從RecycleBin中取出一個ScrapView,將其作為convertView參數(shù)傳遞給Adapter的getView方法,從而達到View復(fù)用的目的,這樣就不必在Adapter的getView方法中執(zhí)行LayoutInflater.inflate()方法了。
RecycleBin中有兩個重要的View數(shù)組,分別是mActiveViews和mScrapViews。這兩個數(shù)組中所存儲的View都是用來復(fù)用的,只不過mActiveViews中存儲的是OnScreen的View,這些View很有可能被直接復(fù)用;而mScrapViews中存儲的是OffScreen的View,這些View主要是用來間接復(fù)用的。
2)使用ViewHolder避免重復(fù)地findViewById
3)快速滑動不適合做大量異步任務(wù),結(jié)合滑動監(jiān)聽,等滑動結(jié)束之后加載當(dāng)前顯示在屏幕范圍的內(nèi)容。
4)getView中避免做耗時操作,主要針對圖片:ImageLoader來處理(原理:三級緩存)
5)對于一個列表,如果刷新數(shù)據(jù)只是某一個item的數(shù)據(jù),可以使用局部刷新,在列表數(shù)據(jù)量比較大的情況下,節(jié)省不少性能開銷。
六、Bitmap優(yōu)化:
1)減少內(nèi)存開支:圖片過大,超過控件需要的大小的情況下,不要直接加載原圖,而是對圖片進行尺寸壓縮,方式是BitmapFactroy.Options 采樣,inSampleSize 轉(zhuǎn)成需要的尺寸的圖片。
2)減少流量開銷:對圖片進行質(zhì)量壓縮,再上傳服務(wù)器。圖片有三種存在形式:硬盤上時是file,網(wǎng)絡(luò)傳輸時是stream,內(nèi)存中是stream或bitmap,所謂的質(zhì)量壓縮,它其實只能實現(xiàn)對file的影響,你可以把一個file轉(zhuǎn)成bitmap再轉(zhuǎn)成file,或者直接將一個bitmap轉(zhuǎn)成file時,這個最終的file是被壓縮過的,但是中間的bitmap并沒有被壓縮。bitmap.compress(Bitmap.CompressFormat.PNG,100,bos);
七、線程優(yōu)化:
使用線程池。為什么要用線程池?
1、從“為每個任務(wù)分配一個線程”轉(zhuǎn)換到“在線程池中執(zhí)行任務(wù)”
2、通過重用現(xiàn)有的線程而不是創(chuàng)建新線程,可以處理多個請求在創(chuàng)建銷毀過程中產(chǎn)生的巨大開銷
3、當(dāng)使用線程池時,在請求到來時間 ,不用等待系統(tǒng)重新創(chuàng)建新的線程,而是直接復(fù)用線程池中的線程,這樣可以提高響應(yīng)性。
4、通過和適當(dāng)調(diào)整線程池的大小 ,可以創(chuàng)建足夠多的線程以使處理器能夠保持忙碌狀態(tài),同時還可以防止過多線程相互競爭資源而使應(yīng)用程序耗盡內(nèi)存或者失敗。
5、一個App里面所有的任務(wù)都放在線程池中執(zhí)行后,可以統(tǒng)一管理 ,當(dāng)應(yīng)用退出時,可以把程序中所有的線程統(tǒng)一關(guān)閉,避免了內(nèi)存和CPU的消耗。
6、如果這個任務(wù)是一個循環(huán)調(diào)度任務(wù),你則必須在這個界面onDetach方法把這個任務(wù)給cancel掉,如果是一個普通任務(wù)則可cancel,可不cancel,但是最好cancel
7、整個APP的總開關(guān)會在應(yīng)用退出的時間把整個線程池全部關(guān)閉。
八、一些性能優(yōu)化建議:
1)避免創(chuàng)建過多對象,造成頻繁的gc
2)不要過多使用枚舉,枚舉占用的空間比整型大很多
3)字符串的拼接使用StringBuffer、StringBuilder來替代直接使用String,因為使用String會創(chuàng)建多個String對象,參考第一條。
4)適當(dāng)使用軟引用,(弱引用就不太推薦了)
5)使用內(nèi)存緩存和磁盤緩存。
以上就是關(guān)于app頁面布局優(yōu)化建議相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
okpay官網(wǎng)app下載(okpay支付平臺下載)
杭州70歲以上老人100元補貼(杭州70歲以上老人100元補貼怎么領(lǐng))