鴻蒙UI開發

鴻蒙UI開發

本文旨在分享一些鴻蒙UI布局開發上的一些建議,特別是對屏幕寬高比發生變化時的應對思路和好的實踐。

折疊屏適配

一般情況(自適應布局/響應式布局

1.自適應布局

1.1自適應拉伸

左右組件定寬

TypeScript
//左右定寬
Row() {
? Text("健康使用手機")
? ? .fontSize(16)
? ? .width(135)
? Blank()
? Toggle({ type: ToggleType.Switch })
? ? .width(36)
}
.borderRadius(12)
.padding({ left: 13, right: 13 })
.backgroundColor('#FFFFFF')
.width('100%')

左右組件不定寬(左組件占剩余寬度,右組件不定寬)

TypeScript
//layoutWeight
//左右不定寬,
? Row() {
? ? ...
? ? Text("我的寬度占剩余的寬度"+"111111111111")
? ? ? .maxLines(1)
? ? ? .textOverflow({ overflow: TextOverflow.Ellipsis })
? ? ...
? }
? .layoutWeight(1)

? Text("我的寬度不固定")
? ? .textAlign(TextAlign.End)
? ? //這個margin自我調整,一般為做組件所有icon的寬度和
? ? .margin({ left: 54 })
}
.width('100%')

1.2均分拉伸

靈活使用彈性布局Flex

TypeScript
//不換行
Flex({ justifyContent: FlexAlign.SpaceEvenly }) {
? ForEach(this.list, () => {
? ? this.Item()
? })
}

//換行
Flex({ justifyContent: FlexAlign.Center ,wrap:FlexWrap.Wrap}) {
? ForEach(this.list, () => {
? ? this.Item()
? })
}

1.3自適應延伸

TypeScript
Scroll() {
? Row({ space: 10 }) {
? ? ForEach(this.appList, () => {
? ? ? Column() {
? ? ? ? Image($r('app.media.icon'))
? ? ? ? ? .width(48)
? ? ? ? ? .height(48)
? ? ? ? Text($r('app.string.show_app_name'))
? ? ? ? ? .fontSize(12)
? ? ? ? ? .textAlign(TextAlign.Center)
? ? ? }.width(80).height(102)
? ? })
? }
}
.scrollable(ScrollDirection.Horizontal)
.width("100%")

2.響應式布局

2.1媒體查詢

TypeScript
//核心代碼
private breakpoints: BreakpointEntity[] = [
? { name: 'xs', size: 0 }, { name: 'sm', size: 320 },
? { name: 'md', size: 600 }, { name: 'lg', size: 840 }
]

/**
?*
更新當前斷點
?* 當傳入的斷點與當前斷點不同時,更新當前斷點并持久化
?*/
private updateCurrentBreakpoint(breakpoint: string) {
? if (this.currentBreakpoint !== breakpoint) {
? ? this.currentBreakpoint = breakpoint;
? ? AppStorage.Set<string>('currentBreakpoint', this.currentBreakpoint);
? ? console.log('on current breakpoint: ' + this.currentBreakpoint);
? }
}

/**
?*
注冊斷點監聽器
?* 為每個斷點創建媒體查詢監聽器,當屏幕尺寸匹配時,更新當前斷點
?*/
public register() {
? this.breakpoints.forEach((breakpoint: BreakpointEntity, index) => {
? ? let condition :string = '';
? ? //
監聽句柄,反應視窗寬度和breakpoint.size的關系
? ? if (index === this.breakpoints.length - 1) {
? ? ? condition = '(' + breakpoint.size + 'vp<=width' + ')';
? ? } else {
? ? ? condition = '(' + breakpoint.size + 'vp<=width<' + this.breakpoints[index + 1].size + 'vp)';
? ? }
? ? console.log(condition);
? ? // breakpoint.size vp <= width
的條件改變時觸發回調,傳遞此時視窗大小
? ? breakpoint.mediaQueryListener = mediaQuery.matchMediaSync(condition);
? ? breakpoint.mediaQueryListener.on('change', (mediaQueryResult) => {
? ? ? if (mediaQueryResult.matches) {
? ? ? ? this.updateCurrentBreakpoint(breakpoint.name);
? ? ? }
? ? })
? })
}

3.典型布局場景

3.1挪移布局

?

柵格布局GridRow

TypeScript
GridRow() {
? GridCol({ span: { sm: 12, md: 6, lg: 6 } }) {
? ? Text("圖片內容")
? }
? .width("100%")
? .height("50%")
? .backgroundColor(Color.Red)
? GridCol({ span: { sm: 12, md: 6, lg: 6 } }) {
? ? ? Text("文字標題")
? }
? .width("100%")
? .height("50%")
? .backgroundColor(Color.Blue)
}

3.2重復布局

柵格布局GridRow

TypeScript
Scroll() {
? GridRow() {
? ? ForEach([0, 1, 2, 3, 4, 5, 6, 7], () => {
? ? ? GridCol({ span: { sm: 12, md: 6, lg: 6 } }) {
? ? ? ? Column() {
? ? ? ? ? RepeatItemContent()
? ? ? ? }
? ? ? }
? ? })
? }
}

3.3頂部布局

柵格布局GridRow

TypeScript
@State needWrap: boolean = true

build() {
? GridRow() {
? ? // 第一行布局
? ? GridCol({ span: { sm: 12, md: 6, lg: 7 } }) {
? ? ? Row() {
? ? ? ? Text($r('app.string.recommended')).fontSize(24)
? ? ? ? Blank()
? ? ? ? Image($r('app.media.ic_public_more'))
? ? ? ? ? .width(32)
? ? ? ? ? .height(32)
? ? ? ? ? .visibility(this.needWrap ? Visibility.Visible : Visibility.None)
? ? ? }
? ? ? .width('100%')
? ? ? .alignItems(VerticalAlign.Center)
? ? }
? ? // 第二行布局
? ? GridCol({ span: { sm: 12, md: 6, lg: 5 } }) {
? ? ? Flex({ alignItems: ItemAlign.Center }) {
? ? ? ? Search({ placeholder: '猜您喜歡: 萬水千山' })
? ? ? ? Image($r('app.media.audio_fm'))
? ? ? ? ? .width(32)
? ? ? ? ? .height(32)
? ? ? ? Image($r('app.media.ic_public_more'))
? ? ? ? ? .width(32)
? ? ? ? ? .height(32)
? ? ? ? ? .visibility(this.needWrap ? Visibility.None : Visibility.Visible)
? ? ? }
? ? }//控制顯隱多余元素
? }.onBreakpointChange((breakpoint: string) => {
? ? if (breakpoint === 'sm') {
? ? ? this.needWrap = true
? ? } else {
? ? ? this.needWrap = false
? ? }
? })
}

3.復雜情況(判斷手機的狀態)

3.1折疊屏適配

TypeScript
// 當前折疊屏狀態(若當前為折疊屏設備才有效)
@State curFoldStatus: display.FoldStatus = display.getFoldStatus();
if (display.isFoldable()) {
? // 監聽折疊屏狀態變更,更新折疊態
? display.on('foldStatusChange', (curFoldStatus: display.FoldStatus) => {
? ? this.curFoldStatus = curFoldStatus;
? })
}

build() {
?? // 折疊屏UI展示
?? if (display.isFoldable()) {
?? ? ? ...
?? ? }
?? } else { // 非折疊屏UI展示
?? ? ? ...
?? ? }
?? }
}

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

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

相關文章

FreeRTOS 五種內存管理算法深度對比分析

FreeRTOS 提供了五種動態內存管理算法&#xff08;heap_1 至 heap_5&#xff09;&#xff0c;針對不同應用場景在實時性、內存效率、碎片控制等方面進行了差異化設計。以下從實現原理、性能指標及適用場景進行全面對比&#xff1a; 一、Heap_1&#xff1a;靜態分配優先 ?核心…

基于EFISH-SBC-RK3576的無人機智能飛控與數據存儲方案

一、方案背景 民用無人機在電力巡檢、農業植保、應急救援等領域快速普及&#xff0c;但傳統方案面臨?多協議設備兼容性差?、?野外環境數據易丟失?、?復雜電磁干擾?三大痛點。 電魚智能推出?EFISH-SBC-RK3576?&#xff0c;可集成雙冗余總線接口與工業級加固存儲&#x…

怎樣進行服務器的日常安全監控和審計?

服務器的日常安全監控和審計是保障服務器安全運行的重要措施&#xff0c;以下是一些常見的方法和工具&#xff1a; 系統日志監控 啟用日志功能&#xff1a;確保服務器操作系統、應用程序和數據庫等都啟用了詳細的日志記錄功能。例如&#xff0c;Linux 系統中的 syslog&#x…

數據庫----單表、多表

數據庫 create database 數據庫名稱;---創建數據庫create database 數據庫名稱 default charsetutf8mb4;---創建數據庫&#xff0c;同時指定編碼show databases;---查看當前數據庫管理下存在多少數據庫show databases like "db_%";---查詢以db_開頭的數據庫select d…

DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)之添加行拖拽排序功能示例6,TableView16_06 分頁表格拖拽排序

前言&#xff1a;哈嘍&#xff0c;大家好&#xff0c;今天給大家分享一篇文章&#xff01;并提供具體代碼幫助大家深入理解&#xff0c;徹底掌握&#xff01;創作不易&#xff0c;如果能幫助到大家或者給大家一些靈感和啟發&#xff0c;歡迎收藏關注哦 &#x1f495; 目錄 Deep…

遺傳算法優化支持向量機分類是一種將遺傳算法與支持向量機相結合的方法

遺傳算法優化支持向量機分類是一種將遺傳算法與支持向量機相結合的方法&#xff0c;旨在提高支持向量機的分類性能。以下是其相關內容的詳細介紹&#xff1a; 支持向量機&#xff08;SVM&#xff09; 原理&#xff1a;SVM是一種基于統計學習理論的機器學習方法&#xff0c;其…

Python中的Requests庫

什么是Python中的Requests模塊&#xff1f; requests模塊是Python中廣泛使用的庫&#xff0c;用于簡化HTTP請求的發送和響應處理。無論是調用API、下載文件、處理復雜會話管理&#xff0c;requests都能提供很好的解決方案。 一、基礎使用方法 1.GET請求 GET請求用于獲取服務…

復習MySQL20250327

第一章 基本操作 一、管理數據庫 難點&#xff1a;創建數據庫 輸入cmd的MySQL安裝路徑C:\Program Files\MySQL\MySQL Server 8.0\bin 1.查看所有數據庫 show databases; 2.創建數據庫 create database hsusers default charset utf8 collate utf8_general_ci;create data…

谷歌推出Gemini實時AI視頻功能,開啟智能交互新體驗

3月24日&#xff0c;谷歌發言人亞歷克斯約瑟夫向媒體證實&#xff0c;谷歌已開始向 Gemini Live 推出新的人工智能功能。這些功能使 Gemini 能夠“看到”用戶的屏幕內容&#xff0c;或通過智能手機攝像頭獲取畫面&#xff0c;并實時回答與之相關的問題。這一創新標志著人工智能…

Windows 新型零日漏洞:遠程攻擊可竊取 NTLM 憑證,非官方補丁已上線

近日&#xff0c;安全研究人員披露了一個新型 Windows 零日漏洞&#xff0c;影響從Windows 7和Server 2008 R2到最新Windows 11 v24H2及Server 2025的所有Windows操作系統版本。攻擊者只需誘使用戶在Windows資源管理器中查看惡意文件&#xff0c;即可利用該零日漏洞竊取NTLM&am…

一款超級好用且開源免費的數據可視化工具——Superset

認識Superset 數字經濟、數字化轉型、大數據等等依舊是如今火熱的領域&#xff0c;數據工作有一個重要的環節就是數據可視化。 看得見的數據才更有價值&#xff01; 現如今依舊有多數企業號稱有多少多少數據&#xff0c;然而如果這些數據只是呆在冷冰冰的數據庫或文件內則毫無…

作業14 (2023-05-22_const修飾指針)

第1題/共5題【單選題】 C程序常見的錯誤分類不包含:( ) A.編譯錯誤 B.鏈接錯誤 C.棧溢出 D.運行時錯誤 回答正確 答案解析: 棧溢出是運行時錯誤的一種,因此C程序不會將棧溢出錯誤單獨列出來,棧溢出包含在運行時錯誤中。 因此:選擇C 第2題/共5題【單選題】 以下關于…

《Tr0ll2 靶機滲透實戰:弱口令+SUID+兩種緩沖區溢出+ 提權完整+fcrackzip暴力破解+shellshock漏洞+臟牛三種root提權復盤》

Tr0ll2 1、主機發現 arp-scan -l 2、端口掃描 nmap -sS -sV 192.168.66.181 nmap -sS -A -T4 -p- 192.168.66.181 nmap --scriptvuln 192.168.66.181PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.0.8 or later 22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.4 (…

redis常用部署架構之redis分片集群。

redis 3.x版本后開始支持 作用&#xff1a; 1.提升數據讀寫速度 2..提升可用性 分片集群就是將業務服務器產生的數據儲存在不同的機器上。 redis分片集群的架構 如上圖所示&#xff0c;會將數據分散存儲到不同的服務器上&#xff0c;相比于之前來說&#xff0c;redis要處…

分布式數據庫介紹

分布式數據庫介紹 一、定義與核心概念 分布式數據庫是一種在物理上分散存儲、邏輯上統一管理的數據管理系統&#xff0c;其核心特征包括數據分布性、邏輯關聯性、場地透明性和可擴展性。根據最新定義&#xff0c;分布式數據庫需具備分布式事務處理能力、平滑擴展能力&#xf…

MybatisPlus(SpringBoot版)學習第五講:條件構造器和常用接口

目錄 1.wrapper介紹 2.QueryWrapper 2.1 例1&#xff1a;組轉查詢條件 Compare Nested Join Func 2.2 例2&#xff1a;組裝排序條件 2.3 例3&#xff1a;組裝刪除條件 2.4 例4&#xff1a;條件的優先級 2.5 例5&#xff1a;組裝select子句 2.6 例6&#xff1a;實現子查…

OkHttp 的證書設置

在 Android 開發中&#xff0c;通過 OkHttp 自定義 SSLSocketFactory 和 X509TrustManager 可以有效增強 HTTPS 通信的安全性&#xff0c;防止中間人攻擊&#xff08;如抓包工具 Charles/Fiddler 的攔截&#xff09;。以下是實現防抓包的關鍵技術方案&#xff1a; 一、Okhttp設…

計算機視覺算法實戰——手術導航:技術、應用與未來

?個人主頁歡迎您的訪問 ?期待您的三連 ? ?個人主頁歡迎您的訪問 ?期待您的三連 ? ?個人主頁歡迎您的訪問 ?期待您的三連? ??? ????????? ?? 1. 手術導航中的計算機視覺&#xff1a;領域介紹 計算機視覺在手術導航領域的應用代表了現代醫學與人工智…

【科研繪圖系列】R語言繪制PCA與變量的相關性散點圖(scatter plot)

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹加載R包數據下載導入數據畫圖輸出圖片系統信息介紹 【科研繪圖系列】R語言繪制PCA與變量的相關性散點圖(scatter plot) 加載R包 library(tidyverse) library(ggpubr)數據下載 …

深度解析Spring Boot可執行JAR的構建與啟動機制

一、Spring Boot應用打包架構演進 1.1 傳統JAR包與Fat JAR對比 傳統Java應用的JAR包在依賴管理上存在明顯短板&#xff0c;依賴項需要單獨配置classpath。Spring Boot創新的Fat JAR&#xff08;又稱Uber JAR&#xff09;解決方案通過spring-boot-maven-plugin插件實現了"…