自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一個APP如何適配多個Andiroid終端?

開發(fā) 開發(fā)工具
傳統(tǒng)的多終端適配方案,是為大尺寸Pad開發(fā)一個特定的HD版本。但是目前支持Android系統(tǒng)的設(shè)備類型越來越豐富,不同類型的設(shè)備尺寸也越來越多樣化,特定的HD版本并不能適配所有設(shè)備尺寸。

 [[345928]]

阿里妹導(dǎo)讀:傳統(tǒng)的多終端適配方案,是為大尺寸Pad開發(fā)一個特定的HD版本。但是目前支持Android系統(tǒng)的設(shè)備類型越來越豐富,不同類型的設(shè)備尺寸也越來越多樣化,特定的HD版本并不能適配所有設(shè)備尺寸。App如何在這么多尺寸的設(shè)備上,為用戶提供較為一致的瀏覽體驗?阿里巴巴文娛技術(shù) 叮東 將分享優(yōu)酷APP響應(yīng)式的技術(shù)實現(xiàn)和落地方法,希望對所有APP的開發(fā)同學(xué)有所啟發(fā)。

Android響應(yīng)式方案

 

響應(yīng)式的核心是拉通多終端的適配規(guī)則,開發(fā)一套界面,一個APP兼容多尺寸終端設(shè)備的顯示,能夠根據(jù)用戶的行為以及設(shè)備的環(huán)境(屏幕尺寸、屏幕方向、是否分屏等)進(jìn)行相應(yīng)的頁面布局以及容器尺寸的調(diào)整,為用戶提供更加舒適的界面和更好的用戶體驗。

[[345930]]

 

1 響應(yīng)式SDK

App的每個頁面支持響應(yīng)式,開發(fā)成本是很高的。

響應(yīng)式SDK,就是為了解決App在不同尺寸設(shè)備下的適配問題,把設(shè)備的屏幕信息、容器布局規(guī)則(列數(shù)、尺寸)、業(yè)務(wù)數(shù)據(jù)二次加工等行為進(jìn)行統(tǒng)一管理,以適應(yīng)新的屏幕尺寸。

 

2 加載流程設(shè)計

 

通用的頁面加載流程,通常都是從數(shù)據(jù)返回開始,數(shù)據(jù)解析完成后,進(jìn)行頁面布局渲染以及容器布局渲染。響應(yīng)式在通用加載流程的基礎(chǔ)上,加入了響應(yīng)式狀態(tài)變化通知、響應(yīng)式數(shù)據(jù)剪裁、響應(yīng)式頁面布局、響應(yīng)式容器布局等流程。

具體加載的流程分為兩種情況:

  • 用戶請求數(shù)據(jù)
  • 屏幕尺寸發(fā)生變化

3 架構(gòu)設(shè)計

優(yōu)酷各個業(yè)務(wù)開發(fā)團(tuán)隊,使用了統(tǒng)一的業(yè)務(wù)架構(gòu),我們在統(tǒng)一架構(gòu)的基礎(chǔ)上進(jìn)行響應(yīng)式適配,提供了響應(yīng)式SDK,拉通各個業(yè)務(wù)方不同頁面的適配規(guī)則,確保了適配效果的一致性,同時提供了基礎(chǔ)的響應(yīng)式控件,降低業(yè)務(wù)方的接入成本,那么響應(yīng)式架構(gòu)具體是怎么實現(xiàn)的呢?

 

從結(jié)構(gòu)上看,響應(yīng)式由優(yōu)酷統(tǒng)一架構(gòu)、響應(yīng)式SDK、響應(yīng)式頁面布局、響應(yīng)式容器布局四部分相互配合完成。在這些基礎(chǔ)上支撐了首頁、頻道頁、播放頁、會員頁、搜索、個人中心等眾多的業(yè)務(wù)場景。

優(yōu)酷統(tǒng)一架構(gòu)和響應(yīng)式SDK,提供響應(yīng)式架構(gòu)能力。

響應(yīng)式頁面布局、響應(yīng)式容器布局,提供響應(yīng)式參考實現(xiàn)。

4 數(shù)據(jù)二次加工

響應(yīng)式并不是簡單的將現(xiàn)有Phone端的業(yè)務(wù)數(shù)據(jù),投放到Pad、折疊屏上,單純的進(jìn)行UI頁面適配。想要在不同尺寸設(shè)備上都能獲得良好的適配效果,需要對Phone端的業(yè)務(wù)數(shù)據(jù)二次加工,進(jìn)行數(shù)據(jù)過濾、數(shù)據(jù)映射、數(shù)據(jù)合并、數(shù)據(jù)補全等操作,才能更好的適配Pad和折疊屏。

響應(yīng)式SDK只是負(fù)責(zé)把數(shù)據(jù)二次加工的協(xié)議規(guī)則定下來,具體的數(shù)據(jù)二次加工邏輯需要業(yè)務(wù)方自己實現(xiàn)。優(yōu)酷的統(tǒng)一架構(gòu)提供了數(shù)據(jù)切面的能力,在切面上增加數(shù)據(jù)二次處理的邏輯,實現(xiàn)了統(tǒng)一的數(shù)據(jù)處理。

數(shù)據(jù)過濾

大尺寸設(shè)備上,總會遇到一些復(fù)雜的,適配不了的,也不重要的組件,這部分組件可以根據(jù)具體情況過濾處理,例如:下圖中的weex組件,在Pad上直接過濾掉,不顯示。

 

數(shù)據(jù)映射

存在一些帶交互的復(fù)雜組件或者Pad上適配效果較差的組件,可以直接映射成其他已適配的組件。例如:下圖中的帶視頻預(yù)覽的預(yù)約組件映射成普通的預(yù)約組件。

 

數(shù)據(jù)合并

相鄰的兩個組件,其中有一個組件無法很好的適配大尺寸Pad,可以嘗試將其數(shù)據(jù)合并到其他組件內(nèi)。

例如:下圖中第1個組件寬度鋪滿頁面寬度,在大尺寸上無法適配,第2個組件通過修改列數(shù)、尺寸就可以適配。Pad豎屏下,將第一個組件插入到第二個組件的首位,進(jìn)行數(shù)據(jù)合并,按照第二個組件的進(jìn)行適配,顯示為3列2行,達(dá)到很好的適配效果。

 

數(shù)據(jù)補全

在橫豎屏切換過程中,部分組件會遇到組件的數(shù)量,無法鋪滿屏幕的寬度,導(dǎo)致出現(xiàn)留白的問題。

例如:把手機(jī)上的6條數(shù)據(jù),直接投放到Pad橫屏下,就會出現(xiàn)下圖的留白問題:

 

為了解決這一類數(shù)據(jù)缺失的問題,我們選擇的解法是服務(wù)端多下發(fā)一部分業(yè)務(wù)數(shù)據(jù),客戶端根據(jù)具體的屏幕尺寸,動態(tài)調(diào)整顯示的個數(shù),確保顯示效果。

例如:下圖中手機(jī)上顯示2列3行,共6條數(shù)據(jù),到了Pad豎屏上顯示3列2行,共6條數(shù)據(jù),到了Pad橫屏上會補全2條數(shù)據(jù),顯示4列2行,共8條數(shù)據(jù)。

 

5 頁面響應(yīng)式

響應(yīng)式狀態(tài)

響應(yīng)式狀態(tài)是頁面響應(yīng)式最基礎(chǔ)也是最重要的一個能力,像橫豎屏切換、分屏模式、折疊屏折疊打開,都會導(dǎo)致頁面的寬高發(fā)生變化,產(chǎn)生不同的響應(yīng)式狀態(tài),頁面內(nèi)的內(nèi)容會進(jìn)行重新布局以及組件尺寸調(diào)整,以適應(yīng)頁面尺寸的變化,鋪滿屏幕,達(dá)到更好的顯示效果。

橫豎屏切換:

 

分屏模式:

 

折疊屏:

 

響應(yīng)式狀態(tài)管理

響應(yīng)式狀態(tài)與Activity頁面的生命周期保持一致,不同頁面響應(yīng)式狀態(tài)可能不一致。響應(yīng)式SDK提供了ResponsiveActivity、ResponsiveFragment兩個基類,ResponsiveActivity統(tǒng)一封裝了響應(yīng)式的狀態(tài)變化。當(dāng)屏幕尺寸發(fā)生改變時,ResponsiveActivity和ResponsiveFragment會回調(diào)onResponsiveLayout方法,業(yè)務(wù)方接到onResponsiveLayout的通知,主動遍歷當(dāng)前頁面內(nèi)的所有容器,根據(jù)響應(yīng)式狀態(tài),動態(tài)修改容器的布局、布局列數(shù)、尺寸等,重新渲染當(dāng)前頁面。

由于優(yōu)酷使用了統(tǒng)一框架,根據(jù)響應(yīng)式狀態(tài)動態(tài)修改頁面內(nèi)所有容器的邏輯,統(tǒng)一在框架內(nèi)部處理,避免了業(yè)務(wù)方的修改,降低了接入成本。

  1. /**   
  2.  *響應(yīng)式狀態(tài)回調(diào)   
  3.  *   
  4.  * @param newConfig                   配置信息   
  5.  * @param responsiveLayoutState       當(dāng)前響應(yīng)式狀態(tài)   
  6.  * @param responsiveLayoutStateChanged響應(yīng)式狀態(tài)是否已發(fā)生改變  
  7.  */ 
  8. protectedvoidonResponsiveLayout(ConfigurationnewConfig,intresponsiveLayoutState,booleanresponsiveLayoutStateChanged) { 
  9.  

獲取響應(yīng)式狀態(tài)

響應(yīng)式狀態(tài)的定義,需要有一個具體計算的規(guī)則,在所有尺寸的設(shè)備上都按照統(tǒng)一的規(guī)則進(jìn)行狀態(tài)區(qū)分,那么不同的響應(yīng)式狀態(tài)是如何區(qū)分的呢?

首先定義標(biāo)準(zhǔn)手機(jī)屏幕的物理寬度為400dp(經(jīng)過大量手機(jī)設(shè)備調(diào)試采樣之后獲得的手機(jī)標(biāo)準(zhǔn)物理尺寸經(jīng)驗值),那么響應(yīng)式狀態(tài)的變化,由兩個比例閾值決定,一個是頁面物理寬度與標(biāo)準(zhǔn)物理寬度的比例閾值1.67倍(物理寬度 = 像素寬度÷屏幕密度),另一個是頁面高度與頁面寬度的比例閾值1.25倍。那么這兩個比例閾值是如何得來的呢?

(1)1.67倍是怎么來的呢?

 

在播放頁的適配過程中,需要適配左右分欄的顯示,我們認(rèn)為左側(cè)播放器的寬度是標(biāo)準(zhǔn)物理寬度,那么整個頁面的寬度就是標(biāo)準(zhǔn)物理寬度的1.67倍,這樣左側(cè)播放器有足夠的空間保障視頻播放的體驗,右側(cè)的也有足夠的空間保障評論的顯示效果。 (2)1.25倍是怎么來的呢?

 

上圖列舉了豎屏華為Pad上,頁面高度是頁面寬度的1.6倍,播放器下方的視頻內(nèi)容操作區(qū),顯示的視頻內(nèi)容是足夠多的。如果頁面高度小于頁面寬度的1.25倍,就會擠壓視頻內(nèi)容操作區(qū)的高度,導(dǎo)致顯示出來的視頻內(nèi)容過少,影響用戶體驗。

當(dāng)頁面物理寬度大于標(biāo)準(zhǔn)物理寬度的1.67倍,同時頁面高度小于等于頁面寬度的1.25倍,即為大屏狀態(tài),其他情況則為小屏狀態(tài)。 不同的響應(yīng)式狀態(tài)

目前支持了小屏布局和大屏布局兩種狀態(tài)。 (1)小屏布局狀態(tài)

折疊屏折疊、折疊屏分屏、Pad豎屏:

 

(2)大屏布局狀態(tài)

折疊屏打開、Pad橫屏:

 

6 容器響應(yīng)式

容器響應(yīng)式,主要解決在頁面尺寸發(fā)生變化時,動態(tài)調(diào)整容器布局的列數(shù)以及坑位的尺寸,優(yōu)酷統(tǒng)一架構(gòu)提供了常用的響應(yīng)式容器布局:輪播布局、網(wǎng)格布局、橫劃布局、瀑布流布局。業(yè)務(wù)方可以快速實現(xiàn)響應(yīng)式的效果。

容器適配列數(shù)、尺寸的效果

 

列數(shù)適配

同一個容器,在不同的尺寸頁面下,會根據(jù)頁面的物理寬度動態(tài)適配,顯示為不同的列數(shù)。

網(wǎng)絡(luò)布局、橫劃布局、瀑布流布局都采用這一套列數(shù)適配的規(guī)則:

響應(yīng)式適配后的列數(shù) = 當(dāng)前屏幕寬度÷(標(biāo)準(zhǔn)屏幕寬度÷標(biāo)準(zhǔn)屏幕寬度下的組件列數(shù) )

響應(yīng)式適配后的列數(shù),并不能解決Pad橫屏上部分組件列數(shù)過多,顯示過密的問題,為了解決這類問題,提供了列數(shù)二次適配的能力。

如下圖所示,左側(cè)是直接根據(jù)規(guī)則算出來的Pad橫屏下的列數(shù)8列,過于密集,顯示效果不好,右側(cè)是列數(shù)二次調(diào)整后,顯示為6列。

 

適配效果:

 

控件尺寸適配

由于不同屏幕尺寸下,容器內(nèi)部會動態(tài)調(diào)整顯示不同的列數(shù),導(dǎo)致控件的尺寸也會發(fā)生變化,那么如何適配控件尺寸的動態(tài)變化呢,響應(yīng)式基礎(chǔ)控件能夠很好的解決這一類問題。

響應(yīng)式基礎(chǔ)控件,內(nèi)部封裝了響應(yīng)式容器尺寸的適配規(guī)則,通過ratioType來定義不同適配規(guī)則下控件寬高的計算邏輯,業(yè)務(wù)方只需要修改最外層的布局控件,通過設(shè)置ratioType就可以快速搞定寬高適配,降低業(yè)務(wù)方的適配成本。

提供了ResponsiveConstraintLayout、ResponsiveFrameLayout、ResponsiveLinearLayout、ResponsiveRelativeLayout、ResponsiveRecyclerView等基礎(chǔ)響應(yīng)式容器。 ratioType的寬度計算規(guī)則示例(頁面左右邊距和橫間距不變):

響應(yīng)式控件寬度 = (當(dāng)前頁面的寬度 - 左右邊距 - 控件之間的間距總和)÷響應(yīng)式適配后的列數(shù)

總結(jié)

隨著折疊屏技術(shù)的進(jìn)一步發(fā)展,折疊屏手機(jī)會越來越普及,越來越多的App需要適配到折疊屏手機(jī)上,響應(yīng)式可以很好的解決折疊屏的適配問題。希望未來更多的APP能夠適配響應(yīng)式,做到一套代碼,運行到不同尺寸的設(shè)備上,節(jié)約開發(fā)成本,提升開發(fā)效能,為不同尺寸的設(shè)備帶來與手機(jī)版本一致的用戶體驗。

【本文為51CTO專欄作者“阿里巴巴官方技術(shù)”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2020-10-08 14:29:57

Kubernetes容器開發(fā)

2016-10-13 12:53:06

Linux終端仿真器

2021-09-14 12:34:33

LinuxLinux終端

2021-10-13 19:39:26

鴻蒙HarmonyOS應(yīng)用

2018-01-08 14:31:09

Electron桌面APP前端

2018-10-11 21:00:18

2014-07-02 10:03:42

App推廣渠道

2024-08-05 14:17:59

大型語言模型適配器LLM

2013-11-18 14:00:09

2023-01-30 16:21:24

Linux外觀

2022-02-22 20:35:22

公鑰私鑰數(shù)據(jù)

2023-08-09 14:43:42

應(yīng)用開發(fā)ArkTS

2021-03-09 11:42:08

GuakeFPS游戲Linux終端

2020-12-16 14:29:40

終端開發(fā)shell

2020-03-02 14:25:17

Ubuntu終端Linux

2020-05-17 16:12:03

Linux終端命令

2012-12-24 13:25:59

微信App

2017-02-24 10:30:51

iOS開源App Store

2018-01-02 16:08:00

AndroidiOSReact Nativ

2019-12-27 15:05:51

Python類方法裝飾器
點贊
收藏

51CTO技術(shù)棧公眾號