【HarmonyOS Next】鴻蒙應用折疊屏設備適配方案

【HarmonyOS Next】鴻蒙應用折疊屏設備適配方案

一、前言

在這里插入圖片描述

目前應用上架華為AGC平臺,都會被要求適配折疊屏設備。目前華為系列的折疊屏手機,有華為 Mate系列(左右折疊,華為 Mate XT三折疊),華為Pocket 系列(上下折疊)。

二、適配方案思路探討

目前鴻蒙應用適配折疊屏的思路分為兩種:分欄和全屏適配。

在這里插入圖片描述
在這里插入圖片描述

分欄
在左右折疊手機上,相當于首頁一級頁面在左邊,二級子頁面點開后在右邊。三折疊上形態未知,有知道的小伙伴可以同步下。
上下折疊手機上,不以分欄的方式呈現,和直板機相似。

單欄(全屏)

全屏適配并且拉伸界面,不進行界面處理。而是處理成平板的UI布局形式,和直板機界面排版不一樣。這種適配方案效果最好,但是工作量較大。

不過目前華為官方反饋說以后不演進分欄方案了。三折疊和25年三月新形態手機的適配都是風險。

三、適配方案實現

傳統的router路由在折疊屏適配上,無法提供良好支撐。所以建議切換到Navigation。

因為不管是路由回退棧的處理,還是頁面數的限制問題。Navigation都優于router,并且華為官方已經明確表示,推薦Navgation的方案。

當然如果有了解HMRouter的同學,也可以使用,因為HMRouter就是在Navgation上進行封裝和優化的三方庫。

分欄
設置主頁面容器Navigation,mode屬性為NavigationMode.Stack:



struct MainPage { message: string = 'Hello World';// 創建一個頁面棧對象并傳入NavigationpageStack: NavPathStack = new NavPathStack()build() {Navigation(this.pageStack) {// 頁面布局Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold).onClick(()=>{// 跳轉到子頁面this.pageStack.pushDestination({name: "OnePage",}, false); //該false表示不需要轉場動畫,默認是有的})}.width('100%')}.height('100%')}.mode(NavigationMode.Split)}
}

細節可參考該文章,點擊跳轉=》(【HarmonyOS】關于官方推薦的組件級路由Navigation的心得體會)


單欄(全屏)
設置主頁面容器Navigation,mode屬性為NavigationMode.Stack:



struct MainPage { message: string = 'Hello World';// 創建一個頁面棧對象并傳入NavigationpageStack: NavPathStack = new NavPathStack()// 使用 @State 裝飾器定義響應式變量,用于存儲組件的寬高 width: number = 0 height: number = 0build() {Navigation(this.pageStack) {// 頁面布局Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold).onClick(()=>{// 跳轉到子頁面this.pageStack.pushDestination({name: "OnePage",}, false); //該false表示不需要轉場動畫,默認是有的})}.width('100%')}.height('100%')}// 分為三種模式,(默認)自動NavigationMode.Auto,單頁面NavigationMode.Stack和分欄NavigationMode.Split.mode(NavigationMode.Stack).backgroundColor(Color.Gray).onSizeChange((width: number, height: number) => {// 當組件大小變化時,更新寬高信息this.width = widththis.height = height}).onAreaChange( (oldValue: Area, newValue: Area)=>{// newValue.width})}
}

界面需要監聽最外層寬高,onSizeChange和onAreaChange都可以,建議使用onAreaChange,用于判定界面是否需要切換為平板適配模式。【目前官方推薦使用600vp 作為當頁面寬度大于等于一定閾值點】

子頁面添加跳轉入口函數,添加NavDestination生命周期的處理:

// 跳轉頁面入口函數

export function OnePageBuilder() {OnePage()
}

struct OnePage {private TAG: string = "OnePage"; message: string = 'Hello World';pathStack: NavPathStack = new NavPathStack();build() {NavDestination() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)}.width('100%')}.height('100%')}.onShown(()=>{console.log(this.TAG, "OnePage onShown");}).onReady((context: NavDestinationContext) => {this.pathStack = context.pathStack;})}
}

在首頁獲取到的寬高,可以使用多種方式緩存起來,例如放到AppStorage,單例中。二級等子頁面進入后就可以判定。

當然頁面中的動態監聽也需要保存。場景需要覆蓋,因為在首頁時用戶可能是折疊狀態,進入子頁面后展開的情況也有。

當然判定手機折疊屏狀態,除了通過寬高,也可通過官方提供的折疊屏狀態進行判斷,不過在上下折疊屏手機上也會被激活,這里需要額外在判定一下。

import { display } from '@kit.ArkUI';let ret: boolean = false;
// 當前是否是折疊屏
ret = display.isFoldable();if(ret){
let callback: Callback<display.FoldStatus> = (data: display.FoldStatus) => {console.info('Listening enabled. Data: ' + JSON.stringify(data));
};
display.on('foldStatusChange', callback);
}// 頁面銷毀時,記得取消監聽
display.off('foldStatusChange', callback);

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896445.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896445.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896445.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SE注意力機制詳解:從原理到應用,全面解析Squeeze-and-Excitation模塊

Squeeze-and-Excitation (SE) 模塊的原理與應用 1. 引言&#xff1a;注意力機制的意義 在深度學習領域&#xff0c;注意力機制&#xff08;Attention Mechanism&#xff09;通過模擬人類視覺的“聚焦”特性&#xff0c;賦予模型動態調整特征重要性的能力。傳統卷積神經網絡&a…

Python基礎大全:Python變量詳解

以下是 Python 變量的詳細解析&#xff1a; 1. 變量的本質 Python 變量本質上是一個 指向對象的引用&#xff08;類似標簽&#xff09;&#xff0c;而不是存儲數據的容器。 變量賦值 a 10 時&#xff0c;Python 會創建一個整數對象 10&#xff0c;然后讓變量 a 指向這個對象…

減少內存占用的兩種方法|torch.no_grad和disable_torch_init

方法區別 在 PyTorch 中&#xff0c;disable_torch_init 和 torch.no_grad() 是兩種完全不同的機制&#xff0c;它們的作用和目的不同&#xff0c;以下是它們的區別&#xff1a; 1. disable_torch_init 作用&#xff1a;disable_torch_init 通常用于某些特定的框架或庫中&am…

數據挖掘工程師的技術圖譜和學習路徑

數據挖掘工程師的技術圖譜和學習路徑: 1.基礎知識 數據挖掘工程師是負責從大量數據中發現潛在模式、趨勢和規律的專業人士。以下是數據挖掘工程師需要掌握的基礎知識: 數據庫知識:熟悉關系數據庫和非關系數據庫的基本概念和操作,掌握SQL語言。 統計學基礎:了解統計學的基…

UE5 Computer Shader學習筆記

首先這里是綁定.usf文件的路徑&#xff0c;并聲明是用聲明著色器 上面就是對應的usf文件路徑&#xff0c;在第一張圖進行鏈接 Shader Frequency 的作用 Shader Frequency 是 Unreal Engine 中用于描述著色器類型和其執行階段的分類。常見的 Shader Frequency 包括&#xff1a…

提示學習(Prompting)

提示學習&#xff08;Prompting&#xff09;是一種利用預訓練語言模型&#xff08;Pre-trained Language Models, PLMs&#xff09;來完成特定任務的方法。它的核心思想是通過設計特定的提示&#xff08;Prompt&#xff09;&#xff0c;將任務轉化為預訓練模型能夠理解的形式&a…

解決單元測試 mock final類報錯

文章目錄 前言解決單元測試 mock final類報錯1. 報錯原因2. 解決方案3. 示例demo4. 擴展 前言 如果您覺得有用的話&#xff0c;記得給博主點個贊&#xff0c;評論&#xff0c;收藏一鍵三連啊&#xff0c;寫作不易啊^ _ ^。 ??而且聽說點贊的人每天的運氣都不會太差&#xff0…

2025系統架構師(一考就過):案例之三:架構風格總結

軟件架構風格是描述某一特定應用領域中系統組織方式的慣用模式&#xff0c;按照軟件架構風格&#xff0c;物聯網系統屬于&#xff08; &#xff09;軟件架構風格。 A:層次型 B:事件系統 C:數據線 D:C2 答案&#xff1a;A 解析&#xff1a; 物聯網分為多個層次&#xff0…

數據如何安全“過橋”?分類分級與風險評估,守護數據流通安全

信息化高速發展&#xff0c;數據已成為企業的核心資產&#xff0c;驅動著業務決策、創新與市場競爭力。隨著數據開發利用不斷深入&#xff0c;常態化的數據流通不僅促進了信息的快速傳遞與共享&#xff0c;還能幫助企業快速響應市場變化&#xff0c;把握商業機遇&#xff0c;實…

Docker數據卷操作實戰

什么是數據卷 數據卷 是一個可供一個或多個容器使用的特殊目錄&#xff0c;它繞過 UFS&#xff0c;可以提供很多有用的特性: 數據卷 可以在容器之間共享和享用對 數據卷 的修改立馬生效對 數據卷 的更新&#xff0c;不會影響鏡像數據卷 默認會一直存在&#xff0c;即時容器被…

kafka stream對比flink

Kafka Streams 和 Apache Flink 雖然都支持實時計算&#xff0c;但它們的定位、架構和適用場景存在顯著差異。選擇哪一個取決于具體的需求、場景和技術棧。以下是兩者的核心區別和適用場景分析&#xff1a; 1. 定位與架構差異 Kafka Streams 定位&#xff1a;輕量級庫&#x…

二叉樹的先序、中序和后序 【刷題反思】

1. 已知中序和后序&#xff0c;求前序 1.1 題目 題目描述&#xff1a;給一棵二叉樹的中序和后序排列&#xff0c;求它的先序排列。 輸入描述&#xff1a;共兩行&#xff0c;均為大寫字母組成的字符串&#xff0c;分別表示一棵二叉樹的中序和后序 輸入&#xff1a;BADC BDCA…

華宇TAS應用中間件與統信最新版本操作系統完成兼容互認證

近日&#xff0c;華宇TAS應用中間件與統信服務器操作系統經過技術迭代與優化&#xff0c;在原先UOS V20的基礎上完成了UOS V25的兼容互認證。此次認證涵蓋了眾多主流的國產CPU平臺&#xff0c;包括鯤鵬920、飛騰FT2000/64、飛騰騰云S2500等。 經過嚴格測試&#xff0c;雙方產品…

Docker 搭建 Redis 數據庫

Docker 搭建 Redis 數據庫 前言一、準備工作二、創建 Redis 容器的目錄結構三、啟動 Redis 容器1. 通過 redis.conf 配置文件設置密碼2. 通過 Docker 命令中的 requirepass 參數設置密碼 四、Host 網絡模式與 Port 映射模式五、檢查 Redis 容器狀態六、訪問 Redis 服務總結 前言…

35. Spring Boot 2.1.3.RELEASE 應用監控【監控信息可視化】

在 Spring Boot 2.1.3.RELEASE 中實現監控信息可視化可以通過多種方式&#xff0c;下面為你詳細介紹使用 Spring Boot Actuator 結合 Grafana 和 Prometheus 以及使用 Spring Boot Admin 這兩種常見方法。 方法一&#xff1a;Spring Boot Actuator Grafana Prometheus 1. 添…

服務器間遷移conda環境

注意&#xff1a;可使用遷移miniconda文件 or 遷移yaml文件兩種方式&#xff0c;推薦前者&#xff0c;基本無bug&#xff01; 一、遷移miniconda文件&#xff1a; 拷貝舊機器的miniconda文件文件到新機器: 內網拷貝&#xff1a;scp -r mazhf192.168.1.233:~/miniconda3 ~/ 外…

在VSCode中安裝jupyter跑.ipynb格式文件

個人用vs用的較多&#xff0c;不習慣在瀏覽器單獨打開jupyter&#xff0c;看著不舒服&#xff0c;直接上教程。 1、在你的環境中pip install ipykernel 2、在vscode的插件中安裝jupyter擴展 3、安裝擴展后&#xff0c;打開一個ipynb文件&#xff0c;并且在頁面右上角配置內核 …

20250223下載并制作RTX2080Ti顯卡的顯存的測試工具mats

20250223下載并制作RTX2080Ti顯卡的顯存的測試工具mats 2025/2/23 23:23 緣起&#xff1a;我使用X99的主板&#xff0c;使用二手的RTX2080Ti顯卡【顯存22GB版本&#xff0c;準備學習AI的】 但是半年后發現看大碼率的視頻容易花屏&#xff0c;最初以為是WIN10經常更換顯卡/來回更…

WordPress R+L Carrier Edition sql注入漏洞復現(CVE-2024-13481)(附腳本)

免責申明: 本文所描述的漏洞及其復現步驟僅供網絡安全研究與教育目的使用。任何人不得將本文提供的信息用于非法目的或未經授權的系統測試。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權,請及時與我們聯系,我們將盡快處理并刪除相關內容。 0x0…

深入了解 NAT 模式:網絡地址轉換的奧秘

深入了解 NAT 模式&#xff1a;網絡地址轉換的奧秘 在計算機網絡的世界里&#xff0c;NAT 模式&#xff08;Network Address Translation&#xff0c;網絡地址轉換&#xff09;扮演著至關重要的角色。它就像是網絡中的翻譯官&#xff0c;在不同網絡地址之間進行轉換&#xff0…