HarmonyOS基础
2024-09-08 19:24:03
参考
日志
- 2022年07月15日17:50:14 初版
自适应布局
自适应拉伸布局
@Entry
@Component
struct Index {
@State message: string = 'Hello World'
aboutToAppear() {
}
build() {
Column({ space: 8 }) { // 根容器(本例使用垂直布局容器作为根容器)
Row() { // 水平布局容器
Text(this.message)
.fontSize(30)
.fontWeight(FontWeight.Bold)
}
.width('100%') // 相对于父级容器Column的宽度(占满)
.padding(10)
.backgroundColor('#FFFFFF')
}
.width('100%') // 相对于手机屏幕的宽度(占满)
.height('100%') // 相对于手机屏幕的宽度(占满)
.padding({ top: 48, bottom: 24, left: 24, right: 24 }) // 屏幕内边距
.backgroundColor('#F1F3F5')
}
}
自适应拉伸布局下设置子组件大小和位置的两个技巧:
技巧一:子组件不可以设置宽度或者设置绝对宽度值。子组件之间使用Blank组件填充。使得Text组件和Button组件贴近左、右边缘。
@Entry
@Component
struct Index {
@State message: string = 'Hello World' aboutToAppear() {
} build() {
Column({ space: 8 }) { // 根容器(本例使用垂直布局容器作为根容器)
Row() { // 水平布局容器
Text(this.message)
.fontSize(30)
.fontWeight(FontWeight.Bold)
}
.width('100%') // 相对于父级容器Column的宽度(占满)
.padding(10)
.backgroundColor('#FFFFFF') Row() { // 水平布局容器
Text(this.message)
.fontSize(30)
.fontWeight(FontWeight.Bold)
Blank()
Button("订阅"); // 相较于Text组件和Button组件贴近左、右
}
.width('100%') // 相对于父级容器Column的宽度(占满)
.padding(10)
.backgroundColor('#FFFFFF')
} .width('100%') // 相对于手机屏幕的宽度(占满)
.height('100%') // 相对于手机屏幕的宽度(占满)
.padding({ top: 48, bottom: 24, left: 24, right: 24 }) // 屏幕内边距
.backgroundColor('#F1F3F5')
}
}
技巧二:子组件不设置宽度,但通过layoutWeight设置该组件在父级容器中宽度权重比例。
layoutWeight仅适用于Flex/Row/Column布局组件下的子组件。@Entry
@Component
struct Index {
@State message: string = 'Hello World' aboutToAppear() {
} build() {
Column({ space: 8 }) { // 根容器(本例使用垂直布局容器作为根容器)
Row() { // 水平布局容器
Text(this.message)
.fontSize(30)
.fontWeight(FontWeight.Bold)
}
.width('100%') // 相对于父级容器Column的宽度(占满)
.padding(10)
.backgroundColor('#FFFFFF') Row() { // 水平布局容器
Text(this.message)
.fontSize(30)
.fontWeight(FontWeight.Bold)
Blank()
Button("订阅"); // 相较于Text组件和Button组件贴近左、右
}
.width('100%') // 相对于父级容器Column的宽度(占满)
.padding(10)
.backgroundColor('#FFFFFF') Row() {
Column().layoutWeight(1).height('100%').backgroundColor('#564AF7')
Column().layoutWeight(2).height('100%').backgroundColor('#46B1E3')
Column().layoutWeight(1).height('100%').backgroundColor('#564AF7')
}
.width('100%')
.height(100)
}
.width('100%') // 相对于手机屏幕的宽度(占满)
.height('100%') // 相对于手机屏幕的宽度(占满)
.padding({ top: 48, bottom: 24, left: 24, right: 24 }) // 屏幕内边距
.backgroundColor('#F1F3F5')
}
}
自适应缩放
{
...
Image('../../resources/base/media/Snipaste_2022-07-16_09-40-16.png')
.width('100%')
.aspectRatio(1.5) // 制定当前组件的宽高比
}
自适应延伸
自适应延伸的要点在于不设置父级容器宽度。由子组件将父容器撑开。当不同设备的屏幕宽度发生变化时,组件随之发生自适应延伸显示更多数量。
{
...
Row() {
Column().width(120).height('100%').backgroundColor('#564AF7')
Column().width(120).height('100%').backgroundColor('#46B1E3')
Column().width(120).height('100%').backgroundColor('#564AF7')
Column().width(120).height('100%').backgroundColor('#46B1E3')
}
.height(100)
}
组件多态
在组件开发中,追求组件在多设备、多语言及“深色模式/浅色模式”的差异性。组件在不同环境中呈现差异化的表现,称之为“多态”。
实现组件多态的关键技巧在于使用资源。
通过
$r('app.type.name')
的形式引用资源。$r
表示resource目录。app
表示应用内定义的资源。type
表示资源类型(或资源的存放位置),可以取“color”、“float”、“string”、“media”等。name
表示资源命名,由开发者定义资源时确定。
引用
rawfile
下资源时使用$rawfile('filename')
的形式,当前rawfile
仅支持Image控件引用图片资源,filename需要表示未rawfile目录下的文件相对路径,文件名需要包含后缀,路径开头不可以以"/"开头。
ArkUI开发框架
- 参考:Gitee Cloudev/HUI
目前(2022年7月16日)ArkUI eTS暂时仅支持手机、折叠屏、平板和车机。
@Entry
@Component
struct Index {
build() {
Column({ space: 8 }) {
Text($r("app.string.entry_MainAbility")) // 使用字符串资源输入文字
.fontColor($r("app.color.fgLevel1")) // 文字颜色,适配深色模式/浅色模式
.fontSize($r("app.float.fontSizeH6")) // 设置字号为6号标题
.fontWeight(Number($r("app.float.fontWeightH6"))) // 设置6号标题的字重
Text($r("app.string.mainability_description")) // 设置正文文本
.fontColor($r("app.color.fgLevel2")) // 子标题采用辅助色
.fontSize($r("app.float.fontSizeSubTitle1")) // 设置子标题字号
.fontWeight(Number($r("app.float.fontWeightSubTitle1"))) // 设置子标题字重
Image($r("app.media.cover")) // 使用媒体资源
.width("100%")
.aspectRatio(1.5)
.borderRadius($r("app.float.radius_L")) // 图片圆角
Text($r("app.string.specialColumn")) // 设置正文文本
.fontColor($r("app.color.fgLevel1")) // 文字颜色
.fontSize($r("app.float.fontSizeBody1")) // 设置正文字号
.fontWeight(Number($r("app.float.fontWeightBody1"))) // 设置正文字重
}
.width('100%')
.height('100%')
.padding({
top: $r("app.float.spaceTop"),
bottom: $r("app.float.spaceBottom"),
left: $r("app.float.spaceLeft"),
right: $r("app.float.spaceRight")
}) // 屏幕边缘间隔
.backgroundColor($r("app.color.appBg")) // App背景颜色
}
}
基础组件
Text组件和Span组件
最新文章
- ceph实践: 搭建环境
- ASP.NET MVC 路由调试工具Router Debugger
- 关于PS激活的一些感想(附上PS CC2015)
- selenium依次点击页面的删除按钮
- SQL Server 按某一字段分组 取 最大 (小)值所在行的数据
- java操作office和pdf文件页面列表导出cvs,excel、pdf报表.
- codeforces #313 div1 B
- Sqlite数据库简介
- 数学题(找规律)-hdu-4371-Minimum palindrome
- Java疯狂讲义(三)
- YII使用PHPExcel导入Excel文件的方法
- [翻译]编写高性能 .NET 代码 第一章:工具介绍 -- Visual Studio
- Educational Codeforces Round 52 (Rated for Div. 2)
- word中一页中添加两种不同的页码
- 【oacle入门】表空间类型
- 英语口语练习系列-C13-聚会
- SpringBoot 推荐博客
- H5开发:横屏适配
- MVC的前端和后端的Model Binding
- 102. Binary Tree Level Order Traversal (Tree, Queue; BFS)
热门文章
- video.js没有显示已播放时间、总时间?
- 利用socket以及多线程、文件流等方法实现通信,互发文本信息以及文件
- c++练习267题 火柴棒等式
- 使用JIMO ActionOne HongHu 及其他MR VR眼镜,将真实场景和游戏内场景混合渲染
- redis 持久化之RDB和AOF的区别
- 前端记录:树形插件zTree 和 表格扩展 tableX
- 京准GPS北斗卫星时钟同步系统投运国电内蒙古晶阳能源有限公司
- sync.Once
- 用python从网页下载单词库
- 【闲话】Vscode+PlatformIO+esp-idf+esp32物联网开发小记之环境搭建