成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

 [[345928]]

阿里妹導讀:傳統(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ā)同學有所啟發(fā)。

Android響應(yīng)式方案

 

響應(yīng)式的核心是拉通多終端的適配規(guī)則,開發(fā)一套界面,一個APP兼容多尺寸終端設(shè)備的顯示,能夠根據(jù)用戶的行為以及設(shè)備的環(huá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ù)二次加工等行為進行統(tǒng)一管理,以適應(yīng)新的屏幕尺寸。

 

2 加載流程設(shè)計

 

通用的頁面加載流程,通常都是從數(shù)據(jù)返回開始,數(shù)據(jù)解析完成后,進行頁面布局渲染以及容器布局渲染。響應(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ā)團隊,使用了統(tǒng)一的業(yè)務(wù)架構(gòu),我們在統(tǒng)一架構(gòu)的基礎(chǔ)上進行響應(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、折疊屏上,單純的進行UI頁面適配。想要在不同尺寸設(shè)備上都能獲得良好的適配效果,需要對Phone端的業(yè)務(wù)數(shù)據(jù)二次加工,進行數(shù)據(jù)過濾、數(shù)據(jù)映射、數(shù)據(jù)合并、數(shù)據(jù)補全等操作,才能更好的適配Pad和折疊屏。

響應(yīng)式SDK只是負責把數(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è)備上,總會遇到一些復雜的,適配不了的,也不重要的組件,這部分組件可以根據(jù)具體情況過濾處理,例如:下圖中的weex組件,在Pad上直接過濾掉,不顯示。

 

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

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

 

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

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

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

 

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

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

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

 

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

例如:下圖中手機上顯示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ǔ)也是最重要的一個能力,像橫豎屏切換、分屏模式、折疊屏折疊打開,都會導致頁面的寬高發(fā)生變化,產(chǎn)生不同的響應(yīng)式狀態(tài),頁面內(nèi)的內(nèi)容會進行重新布局以及組件尺寸調(diào)整,以適應(yīng)頁面尺寸的變化,鋪滿屏幕,達到更好的顯示效果。

橫豎屏切換:

 

分屏模式:

 

折疊屏:

 

響應(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)變化。當屏幕尺寸發(fā)生改變時,ResponsiveActivity和ResponsiveFragment會回調(diào)onResponsiveLayout方法,業(yè)務(wù)方接到onResponsiveLayout的通知,主動遍歷當前頁面內(nèi)的所有容器,根據(jù)響應(yīng)式狀態(tài),動態(tài)修改容器的布局、布局列數(shù)、尺寸等,重新渲染當前頁面。

由于優(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       當前響應(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ī)則進行狀態(tài)區(qū)分,那么不同的響應(yīng)式狀態(tài)是如何區(qū)分的呢?

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

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

 

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

 

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

當頁面物理寬度大于標準物理寬度的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ù) = 當前屏幕寬度÷(標準屏幕寬度÷標準屏幕寬度下的組件列數(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ù),導致控件的尺寸也會發(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)式控件寬度 = (當前頁面的寬度 - 左右邊距 - 控件之間的間距總和)÷響應(yīng)式適配后的列數(shù)

總結(jié)

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

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

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

責任編輯:武曉燕 來源: 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)用

2014-07-02 10:03:42

App推廣渠道

2018-01-08 14:31:09

Electron桌面APP前端

2018-10-11 21:00:18

2013-11-18 14:00:09

2024-08-05 14:17:59

大型語言模型適配器LLM

2023-01-30 16:21:24

Linux外觀

2023-08-09 14:43:42

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

2022-02-22 20:35:22

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

2021-03-09 11:42:08

GuakeFPS游戲Linux終端

2020-03-02 14:25:17

Ubuntu終端Linux

2020-12-16 14:29:40

終端開發(fā)shell

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ù)棧公眾號

主站蜘蛛池模板: 久久国产精品视频 | 欧美视频一区二区三区 | 亚洲一区二区三区视频 | 国产免费视频在线 | 亚洲国产偷 | 91精品福利 | 99精品在线观看 | 国产精品亚洲成在人线 | 日韩在线播放网址 | 欧美一级二级视频 | 爱爱免费视频 | 一级在线观看 | 狠狠狠色丁香婷婷综合久久五月 | 91精品国产91久久久久久最新 | 一级久久久久久 | 精品欧美乱码久久久久久 | 久久久久av | 久在线视频播放免费视频 | 欧美日韩亚洲在线 | 天天操妹子 | 成人小视频在线观看 | 伊人精品 | 国产福利91精品 | 欧美午夜影院 | 天天躁日日躁aaaa视频 | 精品久久久久久久久久久久久久久久久 | 久久人爽爽人爽爽 | 91久久久久久久久久久 | 亚洲精品自在在线观看 | 欧美精品一区二区三区在线四季 | 激情五月婷婷综合 | 91精品一区二区三区久久久久久 | 色伊人网| 一区二区视频在线 | 91啪亚洲精品| 日屁视频| 国产精品日产欧美久久久久 | 麻豆久久久久 | 成人久久| 成人3d动漫一区二区三区91 | 成人小视频在线观看 |