参考


日志

  • 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开发框架

目前(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组件

最新文章

  1. ceph实践: 搭建环境
  2. ASP.NET MVC 路由调试工具Router Debugger
  3. 关于PS激活的一些感想(附上PS CC2015)
  4. selenium依次点击页面的删除按钮
  5. SQL Server 按某一字段分组 取 最大 (小)值所在行的数据
  6. java操作office和pdf文件页面列表导出cvs,excel、pdf报表.
  7. codeforces #313 div1 B
  8. Sqlite数据库简介
  9. 数学题(找规律)-hdu-4371-Minimum palindrome
  10. Java疯狂讲义(三)
  11. YII使用PHPExcel导入Excel文件的方法
  12. [翻译]编写高性能 .NET 代码 第一章:工具介绍 -- Visual Studio
  13. Educational Codeforces Round 52 (Rated for Div. 2)
  14. word中一页中添加两种不同的页码
  15. 【oacle入门】表空间类型
  16. 英语口语练习系列-C13-聚会
  17. SpringBoot 推荐博客
  18. H5开发:横屏适配
  19. MVC的前端和后端的Model Binding
  20. 102. Binary Tree Level Order Traversal (Tree, Queue; BFS)

热门文章

  1. video.js没有显示已播放时间、总时间?
  2. 利用socket以及多线程、文件流等方法实现通信,互发文本信息以及文件
  3. c++练习267题 火柴棒等式
  4. 使用JIMO ActionOne HongHu 及其他MR VR眼镜,将真实场景和游戏内场景混合渲染
  5. redis 持久化之RDB和AOF的区别
  6. 前端记录:树形插件zTree 和 表格扩展 tableX
  7. 京准GPS北斗卫星时钟同步系统投运国电内蒙古晶阳能源有限公司
  8. sync.Once
  9. 用python从网页下载单词库
  10. 【闲话】Vscode+PlatformIO+esp-idf+esp32物联网开发小记之环境搭建