華爲EMUI多窗口模式適配指南

華爲EMUI10.1的智慧分屏功能,多任務處理+應用分屏+懸浮窗口的設計讓用戶在操做時絕不費力,優化了人與機器的智慧交互體驗,幫助用戶大幅提高工做效率。如何讓本身的應用快速適配,第一時間搶佔新的應用入口呢?javascript

在本文中,華爲技術專家朱登奎將從五個維度爲你們分享華爲EMUI多窗口模式適配指南。css

華爲 朱登奎html

朱登奎,華爲CBG軟件部高級研發工程師,從事Android Framework開發工做近10年,目前負責華爲多屏多窗口方案設計工做。java

華爲智慧分屏功能介紹
android

1.1 分屏功能演示微信

在EMUI10.1中智慧分屏功能已經默認開啓,用戶也能夠經過設置-輔助功能-智慧分屏路徑進行開啓和關閉。智慧分屏功能開啓後,能夠經過側邊欄劃出應用多窗口dock,進行分屏、懸浮、窗口拖拽等操做,帶來了極大的便利。app

1.2 智慧分屏創新點ide

華爲智慧分屏,在安卓原生的分屏功能基礎上,進行了一系列的優化:佈局

(1)收編原有分屏入口,提供統一的多窗口啓動入口,可快速完成應用的窗口化啓動;flex

(2)爲IM類應用消息通知提供懸浮窗入口;

(3)在最近任務提供懸浮窗入口;

(4)系統導航(Home、Back、Recent)操做在多窗口和獨佔模式下實現了體驗歸一,多窗口模式退到後臺之後,能夠經過最近任務進行快速切換。

1.3 多窗口能力介紹

華爲智慧分屏對多窗口能力進行了從新定義:新增懸浮窗顯示應用的能力,並支持在窗口之間進行數據拖拽。

不一樣窗口形態(懸浮窗、分屏、全屏)之間還能夠實現快速切換。

華爲智慧分屏應用適配關鍵點

不少應用在適配多窗口模式時,因爲一些在全屏模式下關注不到的點,致使存在兼容性問題。爲此,咱們整理了智慧分屏應用適配的五大關鍵點,幫助開發者快速適配。

2.1 如何聲明支持多窗口

華爲智慧分屏多窗口適配方法與安卓原生多窗口適配策略相同,在 <activity> 或 <application> 節點中添加聲明,啓用多窗口顯示,便可加入到側邊欄dock列表中。

多窗口的配置屬性方法:

在 <activity> 或 <application> 節點中設置該屬性,啓用或禁用多窗口顯示:

android:resizeableActivity=["true" | "false"]

安卓官方多窗口適配參考連接:

https://developer.android.com/guide/topics/ui/multi-window.html

2.2 正確使用應用資源

開發者在適配多窗口模式時,應使用Activity的Context來加載合適的資源。在應用進程中,存在Application和Activity兩類Context,其中Application Contex對應的是屏幕資源信息,而Activity Context對應的是窗口的資源信息。若是在懸浮窗下使用的是 Application Context處理UI 相關的事情,會致使加載的資源沒法感知到多窗口而顯示異常,而使用Activity Context在全屏模式和投屏等模式下依然能夠正常顯示。

activity如何獲取特定窗口類型下的窗口尺寸,考代碼:

獲取dp:

activity.getResources().getConfiguration().screenWidthDpactivity.getResources().getConfiguration().screenHeightDp

獲取px:

activity.getResources().getDisplayMetrics().widthPixelsactivity.getResources().getDisplayMetrics().heightPixelsactivity.getWindowManager().getDefaultDisplay().getMetrics(dm);activity.getWindowManager().getDefaultDisplay().getRealMetrics(dm); activity.getWindowManager().getDefaultDisplay().getRealSize(point);
2.3 正確處理Configuration變化

在應用橫豎屏旋轉和窗口大小變化時,Activity  (和 Fragment) 將收到 onConfigurationChanged()方法回調,而不是先銷燬再重建,在管理視圖更新,從新加載資源等工做時需注意不要沿用以前的Config信息,應從新獲取最新資源信息。

參考代碼:

<activity android:name=".MyActivity" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
2.4 正確處理多窗口下的沉浸式

在華爲智慧分屏或者多窗口模式下,在應用頂部有一個功能bar,所以應用在佈局時,須要調用安卓原生的WindowInsetsListener接口在頂部預留必定的空間,注意不要使用固定高度。

參考代碼:

View#setOnApplyWindowInsetsListenervoid setOnApplyWindowInsetsListener(View.OnApplyWindowInsetsListener listener)View#onApplyWindowInsetsWindowInsets onApplyWindowInsets(WindowInsets insets)
2.5 華爲SDK接口的使用

針對分屏和多窗口模式下的一些創新功能,華爲SDK還提供了一些專門的接口,來幫助應用實現快速適配,具體接口和描述以下表所示.

其中getActivityWindowMode(Activity activity)接口能夠用來判斷應用處於何種窗口類型,onMultiWindowModeChanged接口能夠在全屏和分屏切換時應用新的資源信息,startActivityOneStepWindow接口能夠支持在應用內開啓懸浮窗, 從而得到更好的大屏體驗。

隨着移動終端設備的屏幕尺寸愈來愈大,多窗口模式勢必成爲應用顯示的一種重要形式,側邊欄Dock也會成爲重要的手機應用入口之一,但願更多的應用適配多窗口模式,帶來更好的大屏體驗。


   ·  END  ·  


往  期  精  選  文  章  回  顧


摺疊屏+視頻類App:一鍵全屏,沉浸式觀影體驗感UPUPUP!


泰爾實驗室聯合軟件綠色聯盟創新智能電視生態,現徵募長期合做夥伴


摺疊屏丨華爲專家深度解讀摺疊屏連續性和拖拽適配介紹


本文分享自微信公衆號 - 軟件綠色聯盟(sgachina)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索