LiuJinTao: 2024年4月26日
文章目录
HarmonyOS Next 纯血星河版【三】
一、设计资源 - svg 图标
官网地址:https://developer.huawei.com/consumer/cn/design/harmonyos-icon/
1. 代码示例
@Entry
@Component
struct IcDemo {
build() {
Column() {
// 使用 svg 图标,和图片使用的方式一样的
Image($r('app.media.ic_contacts_5G'))
.width(100)
.fillColor(Color.Green)
}
}
}
2. 小结
二、布局元素的组成
三、 内边距 padding
四、 外边距 margin
五、 padding 和 margin 综合练习
需求:实现如下图所示的登录效果
代码示例;
@Entry
@Component
struct LoginDemo {
build() {
Column() {
Image($r('app.media.touxinag'))
.width(150)
Text('全栈攻城狮喜欢音乐')
.width(200)
.fontSize(18)
.fontColor('#FFAACC')
.margin({
top: 20,
right: 45,
left: 100,
bottom: 30
})
Button('QQ登录')
.width('80%')
.margin({
bottom: 20
})
Button('微信登录')
.width('80%')
.fontColor(Color.Black)
.backgroundColor('#ddd')
}
.padding(20)
.width('90%')
}
}
- 效果演示
六、 边框 border
七、组件圆角
- 特殊圆角
八、背景属性
1. 背景图的基本使用
- 属性效果
代码示例效果:
小结:
2. 背景图位置的设置
代码示例:
- 小结
3. 背景位置 - 单位问题
- 不错,建议还是使用 vp 为单位, 反正内部他会帮我们转为px,你想200px,就直接写200vp。
4. 背景尺寸
九、线性布局 - 主轴
1. 主轴方向排列方式 Column
- 总结
十、顶部导航 - 练习
代码示例:
@Entry
@Component
struct CenterTest {
build() {
Column() {
Row() {
Text('<')
.fontSize(20)
Text('个人中心')
.fontSize(20)
Image($r('app.media.centertest'))
.width(30)
}
.padding(10)
.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
}
}
}
十一、线性布局 - 交叉轴
- 小结
十二、线性布局练习
代码示例:
@Entry
@Component
struct HuaWeiListDemo {
build() {
Column() {
Row() {
Column( { space: 10 }) {
Text('HUEWEI')
.fontSize(20)
.fontWeight(700)
Text('胡杨不死,麒麟不绝!')
.fontSize(12)
.fontColor('#999')
}
.alignItems(HorizontalAlign.Start)
Row() {
Image($r('app.media.huawei'))
.width(50)
.margin({
right: 20
})
Image($r('app.media.ic_contacts_5G'))
.width(20)
}
}
.backgroundColor('#fff')
.borderRadius(15)
.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
.padding({
left: 20,
right: 20
})
.margin({
top: 20
})
}
.width('100%')
.height('100%')
.backgroundColor('#999')
}
}
十三、自适应伸缩
- 份数权重
- 剩余空间
代码示例:
@Entry
@Component
struct weightDemo{
build() {
Column() {
Row() {
Text('状态栏')
.layoutWeight(1)
.fontSize(18)
.margin({ right: 10})
Image($r('app.media.ic_power_off'))
.width(50)
.height(50)
.margin({ left: 10, right:10})
Image($r('app.media.ic_wuraomoshi'))
.width(50)
.height(50)
.margin({ left: 10, right:10})
Image($r('app.media.ic_feixingmoshi'))
.width(50)
.height(50)
.margin({ left: 10, right:10})
}
.width(300)
.height(70)
.backgroundColor('#fff')
.borderRadius(15)
}
.width('100%')
.height('100%')
.backgroundColor('#999')
.padding({
top: 100,
bottom: 50
})
}
}
效果展示: 这里除了状态栏占了一份权重,其他的都给了固定的宽度,那么,所有的都属于状态栏的宽度了。
十四、得物卡片 - 综合练习
代码示例:
@Entry
@Component
struct DewuDemo {
build() {
Column() {
// 详情区域
Column() {
// 图片
Image($r('app.media.dewu'))
.width('100%')
.layoutWeight(1)
.backgroundImageSize(ImageSize.Cover)
.borderRadius({
topLeft: 15,
topRight: 15
})
// 简介区域
Column( { space: 15 } ) {
Column({ space: 10 }) {
Text('Mate 60 | 致敬奔腾不息的你')
.fontWeight(700)
.fontSize(20)
Text('No. 1')
.fontWeight(700)
.fontSize(20)
}
.width('100%')
.alignItems(HorizontalAlign.Start)
// 头像 区域
Row() {
Row( { space: 10 }) {
Image($r('app.media.touxiang_huawei'))
.width(40)
.height(40)
.borderRadius(20)
Text('HMOS')
.fontSize(18)
.fontColor('#999')
}
.layoutWeight(1)
Row({ space: 5 }) {
Image($r('app.media.ic_dianzan'))
.width(20)
Text('9999')
.fontColor('#999')
}
.width(80)
}
.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
}
.width('100%')
.height(130)
.backgroundColor('#FFF')
.padding(10)
.borderRadius( { bottomLeft: 15, bottomRight: 15} )
}
.width(300)
.height(400)
}
.width('100%')
.height('100%')
.backgroundColor('#fffdf9f9')
.padding(20)
}
}
- 效果演示
京东登录页 - 实战练习
代码示例:
@Entry
@Component
struct JDLoginTest {
build() {
Column() {
Column() {
// 背景图
// Text()
// .backgroundImage($r('app.media.background_loging_image'))
// .backgroundImageSize(ImageSize.Cover)
// .width('100%')
// .height('100%')
// 整个内容区域
// 顶部导航栏区域
Row() {
Image($r('app.media.ic_public_cancel_filled'))
.width(16)
.fillColor('#999')
Text('帮助')
.fontSize(16)
.fontColor('#999')
}
.width('100%')
.height(40)
.justifyContent(FlexAlign.SpaceBetween)
// logo区域
Row() {
Image($r('app.media.jd_login_image'))
}
.width(250)
.height(250)
.margin({
top: 20,
bottom: 15
})
// 输入框区域
Column( { space: 20}) {
Row() {
Text('国家/地址')
.fontColor('#999')
.layoutWeight(1)
Text('中国(+86) >')
.fontColor('#999')
}
.width('100%')
.height(40)
.padding({
left: 17,
right: 10
})
.backgroundColor('#fff')
.borderRadius(20)
.justifyContent(FlexAlign.SpaceBetween)
Row() {
TextInput({ placeholder: '请输入手机号'})
.placeholderColor('#999')
.backgroundColor('#fff')
}
}
// 协议区域
Row(){
Checkbox()
.width(10)
Text() {
Span('我已阅读并同意')
Span('《京东隐私政策》')
.fontColor('#3274f6')
Span('《京东用户服务协议》')
.fontColor('#3274f6')
.fontColor('#3274f6')
Span('未注册的手机号自动注册为京东账户')
}
.fontSize(12)
.fontColor('#999')
}
.width('100%')
.margin({
top: 20,
bottom: 20
})
.alignItems(VerticalAlign.Top)
// 登录按钮
Button('登录')
.backgroundColor('#bf2838')
.width('100%')
.margin({
bottom: 15
})
// 注册和忘记密码以及问题反馈区域
Row() {
Text('新用户注册')
.fontSize(14)
.fontColor('#999')
Text('账户密码登录')
.fontSize(14)
.fontColor('#999')
Text('无法登陆')
.fontSize(14)
.fontColor('#999')
}
.width('100%')
.justifyContent(FlexAlign.SpaceEvenly)
.margin( { bottom: 50} )
// 空白的全部由我承担,其他的自己管理好自己。
Blank()
// 其他方式登录区域
Column(){
Text('其它方式登录')
.height(22)
.fontSize(14)
.fontColor('#999')
.margin({ bottom: 28})
Row() {
Image($r('app.media.huawei'))
.width(34)
.height(34)
.borderRadius(17)
Image($r('app.media.weixin_login_image'))
.width(34)
.height(34)
.borderRadius(17)
Image($r('app.media.weibo_login_image'))
.width(34)
.height(34)
.borderRadius(17)
Image($r('app.media.qq_login_image'))
.width(34)
.height(34)
.borderRadius(17)
}
.width('100%')
.justifyContent(FlexAlign.SpaceEvenly)
}
.width('100%')
.height(100)
}
.width('100%')
.height('100%')
.padding({
top: 20,
right: 20,
bottom: 50,
left: 20
})
.backgroundImage($r('app.media.background_loging_image'))
.backgroundImageSize(ImageSize.Cover)
}
}
}
效果展示
总结: