41.HarmonyOS NEXT Layout布局組件系統詳解(八):自定義樣式與類

溫馨提示:本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦!

HarmonyOS NEXT Layout 布局組件系統詳解(八):自定義樣式與類

文章目錄

  • HarmonyOS NEXT Layout 布局組件系統詳解(八):自定義樣式與類
    • 效果演示
    • 1. 自定義樣式概述
    • 2. 自定義樣式屬性定義
      • 2.1 AutoRow 組件中的樣式屬性
      • 2.2 AutoCol 組件中的樣式屬性
    • 3. 自定義樣式的實現原理
      • 3.1 直接樣式屬性
      • 3.2 customClass 屬性
    • 4. 自定義樣式的使用方法
      • 4.1 設置外邊距和內邊距
      • 4.2 設置寬度和高度
      • 4.3 組合使用多種樣式
    • 5. 自定義樣式的最佳實踐
      • 5.1 保持樣式的一致性
      • 5.2 響應式樣式
      • 5.3 使用主題樣式
    • 6. 自定義樣式的擴展方向
      • 6.1 樣式類系統
      • 6.2 樣式主題化
    • 7. 總結

效果演示

1. 自定義樣式概述

在 HarmonyOS 的 Layout 布局組件系統中,除了基本的布局功能外,還提供了豐富的自定義樣式選項,使開發者能夠根據需求靈活調整組件的外觀。本文將詳細介紹 Layout 布局組件系統中的自定義樣式和類的使用方法。

2. 自定義樣式屬性定義

2.1 AutoRow 組件中的樣式屬性

export interface RowProps {// 自定義樣式類customClass?: string;// 外邊距autoMargin?: string | number | Margin;// 內邊距autoPadding?: string | number | Padding;// 寬度autoWidth?: string | number;// 高度autoHeight?: string | number;// 其他屬性...
}

2.2 AutoCol 組件中的樣式屬性

export interface LayoutProps {// 自定義樣式類customClass?: string;// 其他屬性...
}

3. 自定義樣式的實現原理

3.1 直接樣式屬性

AutoRow 組件提供了多個直接樣式屬性,如 autoMargin、autoPadding、autoWidth 和 autoHeight,這些屬性直接映射到組件的樣式屬性:

build() {Column() {Flex({ direction: FlexDirection.Row, justifyContent: this.justify, alignItems: this.ItemAligns, wrap: FlexWrap.Wrap }) {// 渲染內容構建函數this.content();}.width('100%').height('100%').padding(0).margin(0)}.width(this.autoWidth).height(this.autoHeight).padding(this.autoPadding).margin(this.autoMargin)
}

3.2 customClass 屬性

customClass 屬性允許開發者為組件指定自定義的樣式類,這些樣式類可以在應用的樣式文件中定義。雖然在當前的實現中,customClass 屬性已經定義但尚未完全實現,但它為未來的擴展提供了基礎。

4. 自定義樣式的使用方法

4.1 設置外邊距和內邊距

// 設置外邊距
AutoRow({ autoMargin: { bottom: 30 } }) {AutoCol({ span: 12 }) {Text('帶底部外邊距的行').width('100%').height(40).textAlign(TextAlign.Center).backgroundColor('#69c0ff')}
}// 設置內邊距
AutoRow({ autoPadding: { left: 20, right: 20 } }) {AutoCol({ span: 12 }) {Text('帶左右內邊距的行').width('100%').height(40).textAlign(TextAlign.Center).backgroundColor('#69c0ff')}
}

4.2 設置寬度和高度

// 設置寬度和高度
AutoRow({ autoWidth: '90%', autoHeight: '60' }) {AutoCol({ span: 12 }) {Text('自定義寬度和高度的行').width('100%').height(40).textAlign(TextAlign.Center).backgroundColor('#69c0ff')}
}

4.3 組合使用多種樣式

// 組合使用多種樣式
AutoRow({autoMargin: { top: 20, bottom: 20 },autoPadding: 16,autoWidth: '95%',autoHeight: 'auto'
}) {AutoCol({ span: 12 }) {Text('組合樣式的行').width('100%').height(40).textAlign(TextAlign.Center).backgroundColor('#69c0ff')}
}

5. 自定義樣式的最佳實踐

5.1 保持樣式的一致性

在實際開發中,應保持樣式的一致性,可以定義一組標準的樣式值:

// 定義標準樣式值
const STYLES = {margin: {small: 8,medium: 16,large: 24},padding: {small: 8,medium: 16,large: 24},width: {narrow: '90%',standard: '95%',full: '100%'}
};// 使用標準樣式值
AutoRow({autoMargin: { bottom: STYLES.margin.medium },autoPadding: STYLES.padding.small,autoWidth: STYLES.width.standard
}) {// 列內容...
}

5.2 響應式樣式

結合響應式設計,可以根據屏幕尺寸動態調整樣式:

// 根據屏幕寬度設置不同的樣式
let marginValue = 8;
let paddingValue = 8;
let widthValue = '100%';if (screenWidth >= 768) {marginValue = 16;paddingValue = 16;widthValue = '95%';
}
if (screenWidth >= 1200) {marginValue = 24;paddingValue = 24;widthValue = '90%';
}AutoRow({autoMargin: { bottom: marginValue },autoPadding: paddingValue,autoWidth: widthValue
}) {// 列內容...
}

5.3 使用主題樣式

為了支持主題切換,可以定義主題相關的樣式:

// 定義主題樣式
const THEME = {light: {background: '#ffffff',primary: '#1890ff',secondary: '#69c0ff',text: '#000000'},dark: {background: '#141414',primary: '#177ddc',secondary: '#40a9ff',text: '#ffffff'}
};// 當前主題
const currentTheme = isDarkMode ? THEME.dark : THEME.light;// 使用主題樣式
AutoRow() {AutoCol({ span: 12 }) {Text('主題樣式').width('100%').height(40).textAlign(TextAlign.Center).backgroundColor(currentTheme.secondary).fontColor(currentTheme.text)}
}

6. 自定義樣式的擴展方向

6.1 樣式類系統

未來可以實現一個完整的樣式類系統,支持通過 customClass 屬性應用預定義的樣式:

// 定義樣式類
@Styles function cardStyle() {.borderRadius(8).backgroundColor('#f0f0f0').shadow({radius: 4,color: 'rgba(0, 0, 0, 0.1)',offsetX: 0,offsetY: 2})
}// 使用樣式類
AutoRow({ customClass: 'card' }) {AutoCol({ span: 12 }) {Text('卡片樣式').width('100%').height(40).textAlign(TextAlign.Center)}
}

6.2 樣式主題化

支持通過主題系統自動應用樣式:

// 主題化樣式
AutoRow({ theme: 'primary' }) {AutoCol({ span: 12 }) {Text('主題樣式').width('100%').height(40).textAlign(TextAlign.Center)}
}

7. 總結

HarmonyOS Layout 布局組件系統提供了豐富的自定義樣式選項,包括外邊距、內邊距、寬度和高度等。通過這些選項,開發者可以靈活調整組件的外觀,實現各種復雜的界面設計。

雖然當前的實現中 customClass 屬性尚未完全發揮作用,但未來可以通過擴展樣式類系統和主題化支持,進一步增強 Layout 布局組件系統的靈活性和可定制性。

在實際開發中,應保持樣式的一致性,結合響應式設計動態調整樣式,并考慮主題切換的支持,以創建出既美觀又實用的用戶界面。

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

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

相關文章

【Go | 從0實現簡單分布式緩存】-7:增加etcd和gRPC功能

本文目錄 1.序2.引入etcd緩存流程項目結構 3.gocachepb.proto4.服務注冊register.go5.服務發現discover.go6.gRPC客戶端client.gopeers.goclient.go 7.gRPC服務端實現server.go一些問題緩存獲取流程緩存設置流程為什么要帶超時的上下文? 1.序 GeeCache項目并沒有引…

Pytorch系列教程:可視化Pytorch模型訓練過程

深度學習和理解訓練過程中的學習和進步機制對于優化性能、診斷欠擬合或過擬合等問題至關重要。將訓練過程可視化的過程為學習的動態提供了有價值的見解,使我們能夠做出合理的決策。訓練進度必須可視化的兩種方法是:使用Matplotlib和Tensor Board。在本文…

18 | 實現簡潔架構的 Handler 層

提示: 所有體系課見專欄:Go 項目開發極速入門實戰課;歡迎加入我的訓練營:云原生AI實戰營,一個助力 Go 開發者在 AI 時代建立技術競爭力的實戰營;本節課最終源碼位于 fastgo 項目的 feature/s14 分支&#x…

藍隊第三次

1.了解什么是盲注 盲注(Blind SQL Injection)是SQL注入的一種形式,攻擊者無法直接通過頁面回顯或錯誤信息獲取數據,而是通過觀察頁面的布爾狀態(真/假)或時間延遲來間接推斷數據庫信息。例如,通…

sql server 2016 版本補丁說明

包信息和發布類型 Microsoft為創建和分發的 SQL Server 的所有軟件更新包采用了標準化命名架構。 軟件更新包是一個可執行文件(.exe 或 .msi)文件,其中包含一個或多個文件,這些文件可能應用于 SQL Server 安裝以更正特定問題。 …

STM32之I2C硬件外設

注意:硬件I2C的引腳是固定的 SDA和SCL都是復用到外部引腳。 SDA發送時數據寄存器的數據在數據移位寄存器空閑的狀態下進入數據移位寄存器,此時會置狀態寄存器的TXE為1,表示發送寄存器為空,然后往數據控制寄存器中一位一位的移送數…

從青銅到王者:六大排序算法實戰解析

前言 在編程的世界里,排序算法如同一顆璀璨的明珠,閃耀著智慧的光芒。它不僅是計算機科學的基礎知識點,更是每一位程序員必備的技能。今天,就讓我們一同走進排序算法的世界,深入探究冒泡排序、選擇排序、插入排序、快速排序、歸并排序、堆排序這六大經典算法的精髓所在,…

小程序配置webview

1.在微信公眾平臺配置業務域名 1)包括把校驗文件放在服務器根目錄 2)配置域名 2.在小程序中 新建文件 小程序新建頁面:web-view json配置:{ "pageOrientation": "landscape", "renderer":&qu…

不用 Tomcat?SpringBoot 項目用啥代替?

在SpringBoot框架中,我們使用最多的是Tomcat,這是SpringBoot默認的容器技術,而且是內嵌式的Tomcat。 同時,SpringBoot也支持Undertow容器,我們可以很方便的用Undertow替換Tomcat,而Undertow的性能和內存使…

線索二叉樹構造及遍歷算法

線索二叉樹構造以及遍歷算法 線索二叉樹(中序遍歷版)構造線索二叉樹構造雙向線索鏈表遍歷中序線索二叉樹 線索二叉樹(中序遍歷版) 中序遍歷找到對應結點的前驅(土方法) #mermaid-svg-eunGO5d2GhjLxCn5 {fo…

基于SpringBoot的“體育購物商城”的設計與實現(源碼+數據庫+文檔+PPT)

基于SpringBoot的“體育購物商城”的設計與實現(源碼數據庫文檔PPT) 開發語言:Java 數據庫:MySQL 技術:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系統展示 系統總體模塊設計 前臺用戶登錄界面 系統首頁界面…

數據篇| App爬蟲入門(一)

App 的爬取相比 Web 端爬取更加容易,反爬蟲能力沒有那么強,而且數據大多是以 JSON 形式傳輸的,解析更加簡單。在 Web 端,我們可以通過瀏覽器的開發者工具監聽到各個網絡請求和響應過程,在 App 端如果想要查看這些內容就需要借助抓包軟件。常見抓包軟件有: ?工具名稱??…

go context學習

1.Context接口2.emptyCtx3.Deadline()方法4.Done()方法5.Err方法6.Value方法()7.contex應用場景8.其他context方法 1.Context接口 Context接口只有四個方法,以下是context源碼。 type Context interface {Deadline() (deadline time.Time, …

在VMware Workstation Pro上輕松部署CentOS7 Linux虛擬機

首先我們需要下載VM虛擬機和Centos7的鏡像 下載并安裝VMware Workstation Pro 訪問VMware Workstation Pro官網下載 https://www.vmware.com/ 第二步:下載centos7鏡像 訪問centos官網下載 https://www.centos.org/ 開始部署Centos7 點擊創建新的虛擬機 這里是Cen…

Jsoup 解析商品信息時需要注意哪些細節?

在使用Jsoup解析商品信息時,需要注意以下細節和最佳實踐,以確保爬蟲的穩定性和數據的準確性: 1. 檢查HTML文檔的合法性 在解析之前,需要確認所解析的文檔是否是一份合法正確的HTML文檔。如果HTML結構不完整或存在錯誤&#xff0…

Android AudioFlinger(五)—— 揭開AudioMixer面紗

前言: 在 Android 音頻系統中,AudioMixer 是音頻框架中一個關鍵的組件,用于處理多路音頻流的混音操作。它主要存在于音頻回放路徑中,是 AudioFlinger 服務的一部分。 上一節我們講threadloop的時候,提到了一個函數pr…

go的”ambiguous import in multiple modules”

執行“go mod tidy”報如下錯誤: go mod tidy -compat1.17 go: finding module for package github.com/gomooon/goredis go: found github.com/gomooon/goredis in github.com/gomooon/goredis v0.3.5 go: github.com/gomooon/core importsgithub.com/gomooon/gor…

從0開始的操作系統手搓教程27:下一步,實現我們的用戶進程

目錄 第一步:添加用戶進程虛擬空間 準備沖向我們的特權級3(用戶特權級) 討論下我們創建用戶線程的基本步驟 更加詳細的分析代碼 用戶進程的視圖 說一說BSS段 繼續看process.c中的函數 添加用戶線程激活 現在,我們做好了TSS…

Java線程池深度解析,從源碼到面試熱點

Java線程池深度解析,從源碼到面試熱點 一、線程池的核心價值與設計哲學 在開始討論多線程編程之前,可以先思考一個問題?多線程編程的原理是什么? 我們知道,現在的CUP是多核CPU,假設你的機器是4核的&#x…

大數據技術在土地利用規劃中的應用分析

大數據技術在土地利用規劃中的應用分析 一、引言 土地利用規劃是對一定區域內的土地開發、利用、整治和保護所作出的統籌安排與戰略部署,對于實現土地資源的優化配置、保障社會經濟的可持續發展具有關鍵意義。在當今數字化時代,大數據技術憑借其海量數據處理、高效信息挖掘等…