鸿蒙系列教程#02 | 从计数器认识布局基础
The following article is from 编程之王 Author 张风捷特烈
第一篇:
github: https://github.com/toly1994328/HarmonyUnit
gitee: https://gitee.com/toly1994328/HarmonyUnit
[3]. 简单了解组件的封装与拆分
1. 列布局 Column 的背景和宽高
@Component
struct Index {
build() {
Column() {
Text('计数器')
fontSize(28)
.fontWeight(FontWeight.Bold)
.backgroundColor('#440000ff')
}
.backgroundColor('#44ff0000')
}
}
当把 Column 的 height 设置为 '100%' 时,可以看到红色区域会占满全屏,这也表示 Column 自身的区域尺寸。
2. 对齐方式与边距
现在想让文字离左边和上边有点边距,看上去不那么拥挤:
而外边距 margin 不会影响 Text 的实际区域尺寸,只是进行偏移:
如果去除 Text 颜色,两者在视觉表现上没有区别,但实际的布局效果是不同的。所以,在视图布局的学习过程中,设置背景色查看布局区域,可以很好地辅助理解布局特性。
3 计数器布局
在粉色的 Column 中,放置两个文字组件,如下所示:
现在希望让两行文字在 竖直方向 居中显示,可以设置 Column 的 justifyContent 为 FlexAlign.Center 。此时去掉测试区域的颜色,就可以得到期望的计数器布局效果:
4.学习小技巧
@Entry
@Component
struct Index {
@State message: string = '鸿蒙纪元';
build() {
Column() {
Text('计数器')
.fontSize(28)
.fontWeight(FontWeight.Bold)
.margin({ top: 20, left: 20 })
Column() {
Text('下面是你点击按钮的次数:')
.fontSize(18)
Text('0')
.fontSize(36)
.fontColor('#2e3032')
.margin({ top: 10 })
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
}
.alignItems(HorizontalAlign.Start)
.width('100%')
.height('100%')
}
}
1. 按钮和图标的展示
图标通过 SymbolGlyph 组件展示,可以加载系统内置的图标资源。所以得资源可以在官方的 harmonyos-symbol[4] 中查看。使用 fontSize 设置大小、fontColor 设置颜色、fontWeight 设置字重。
Button({ type: ButtonType.Circle, stateEffect: true }) {
SymbolGlyph($r('sys.symbol.plus'))
.fontSize(24)
.fontColor([Color.White])
.fontWeight(FontWeight.Bold)
}.width(56).height(56)
2. Stack 层叠布局
3. 简单的状态变化
struct Index {
@State counter: number = 0;
Button(//略同...
.onClick(()=>this.counter++ )
increment(): void {
this.counter++;
}
Button(//略同...
.onClick(()=>this.increment() )
1. 拆分 AppBar
@Component
struct AppBar {
private title: string = '';
build() {
Row() {
Text(this.title)
.fontSize(20).fontWeight(FontWeight.Bold)
.fontColor($r('sys.color.white'))
}
.backgroundColor('#317bd4')
.width('100%')
.height(56)
.padding({ left: 20, right: 20 })
.justifyContent(FlexAlign.Center)
}
}
对于组件构建来说,设置插槽可以增加布局的灵活性。比如 AppBar 的首尾部分,使用者想要自己传入组件,来满足更多样化的使用场景:
@Component
struct AppBar {
private title: string = '';
@Builder
leadingBuilder() {}
@Builder
tailingBuilder() {}
@BuilderParam leading: () => void = this.leadingBuilder;
@BuilderParam tailing: () => void = this.tailingBuilder;
build() {
Row() {
this.leading()
Text(this.title)
.fontSize(20).fontWeight(FontWeight.Bold)
.fontColor($r('sys.color.white'))
this.tailing()
}
.backgroundColor('#317bd4')
.width('100%')
.height(56)
.padding({ left: 20, right: 20 })
.justifyContent(FlexAlign.SpaceBetween)
}
}
到此,我们遇到的几个注解也可以整理一些,进入知识树中。知识树在一开始并不需要尽善尽美,它是你点滴的积累。可以在后续不断随着知识累计,调节各个枝点。这里再提交一个小里程碑 计数器-v3-组件简单封装[7]
引用链接
[1] 张风捷特烈:
https://juejin.cn/user/149189281194766
[2] HarmonyUnit:
[3] 计数器-布局-v1:
https://github.com/toly1994328/HarmonyUnit/tree/8c15c41e5577312c33440e5fdbbcceda173b80e5
[4] harmonyos-symbol:
https://developer.huawei.com/consumer/cn/design/harmonyos-symbol
[5] 计数器-v2-基本功能:
https://github.com/toly1994328/HarmonyUnit/tree/994916b2e1866bb1898dfb9fe348b231261c8767
[6] 点击这里查看 Index.ets:
https://github.com/toly1994328/HarmonyUnit/blob/994916b2e1866bb1898dfb9fe348b231261c8767/entry/src/main/ets/pages/Index.ets
[7] 计数器-v3-组件简单封装:
https://github.com/toly1994328/HarmonyUnit/tree/994916b2e1866bb1898dfb9fe348b231261c8767
[8] 张风捷特烈:
https://juejin.cn/user/149189281194766
[9] 张风捷特烈:
https://space.bilibili.com/390457600
最后推荐一下我做的网站,玩Android: wanandroid.com ,包含详尽的知识体系、好用的工具,还有本公众号文章合集,欢迎体验和收藏!
推荐阅读:
扫一扫 关注我的公众号
如果你想要跟大家分享你的文章,欢迎投稿~
┏(^0^)┛明天见!