阶段总结一下,嘤嘤嘤
常用组件概览
布局组件:
Column 纵向排列 Row 横向排列
组件内元素呈线性排列,添加主轴交叉轴属性控制元素分布
- 主轴: 属性: justifyContent()
Column()
.justifyContent(FlexAlign.SpaceAround)
FlexAlign.SpaceAround 枚举属性
实现Start Center End SpaceAround SpaceBetween SpaceEvenly 六种排列方式
- 交叉轴: 属性: alignItems()
Column交叉轴:
Column()
.alignItems(HorizontalAlign.Start)
HorizontalAlign.Start 三种分布
Row交叉轴
Row()
.alignItems(VerticalAlign.Center)
VerticalAlign.Center 三种分布
Stack 层叠布局
通过Alignment.枚举 控制3*3相关位置
Stack({ alignContent: Alignment.TopStart }) {
//其他样式组件
}
Flex 弹性布局
组件内元素超出行宽后自动换行 关键属性:wrap:FlexWrap.Wrap
Flex({
wrap:FlexWrap.Wrap, //关键属性,添加后实现自动换行
justifyContent:FlexAlign.SpaceAround, //主轴排列
alignContent:FlexAlign.SpaceAround //交叉轴排列 (主轴交叉轴枚举均为FlexAlign)
}) {其他样式组件}
Grid网格布局
仅支持GridItem子组件 GridItem子组件内支持唯一根组件
Grid(this.scroller) { // 绑定滚动控制器
GridItem() {
Column() //唯一根组件
}
.rowStart(1) //网格横向从1延伸3
.rowEnd(3)
GridItem() {
Row()
}
.columnStart(2) //网格纵向从2延伸4 设置延伸实现不规则网格(计算器样式)
.columnEnd(4)
...
}
.columnsTemplate('1fr 1fr 1fr 1fr') // 列数为4
.rowsTemplate('1fr 1fr 1fr') //行数为3
.columnsGap(12) //列间距12
.rowsGap(6)
.scrollBar(BarState.Auto) // 滚动条自动显隐
Scroll 滚动布局
ScrollDirection.Horizontal 添加枚举属性实现水平滚动
Scroll(this.scroller){
Column(){ // 唯一根组件
// 其他样式组件
}
}
.scrollable(ScrollDirection.Horizontal) //水平方向滚动
.onScroll(() => {
this.num = this.scroller.currentOffset().yOffset //滚动触发事件,将纵向滚动值绑定给变量,实现随着滚动距离变化的其他动效
})
List 列表布局
与Scroll功能相似,使用场景不同
Scroll通常用于整页不同类型内容滚动,如首页内有轮播图,导航卡片,推荐内容
而List多用于有列表语义的环境下,如通讯录,评论区等需要ForEach循环渲染的场景
List({scroller:this.scroller}) { //对象内属性绑定控制器
ListItem(){ //子组件
Column() // 唯一根组件
}
...
ListItemGroup({header:this.MyBuilder}) { // 子组件组
ListItem()
ListItem()
}
.divider() //分隔线
}
.sticky(StickyStyle.Header) //头部粘性标题 (Group内为header属性添加自定义构建样式)
.divider({strokeWidth:1,color:'#000',startMargin:15}) //子元素分隔线
.onScrollIndex((start,end,center) => {}) // 随着滚动触发,传入当前屏幕内开始,结束的子组件的序号
.edgeEffect(EdgeEffect.Spring) //滚动到边缘动效
.onReachEnd(() => {}) //触底事件 (实现触底加载更多)
Swiper 轮播图
Swiper() {
Image($r('app.media.kunkun'))
Image($r('app.media.kunkun'))
Image($r('app.media.kunkun'))
}
.autoPlay(true) //自动滚动
.interval(2500) //自动滚动时间
.loop(true) //首尾相接
.indicator(
Indicator.dot()
.itemWidth(8) //导航点宽度
.itemHeight(8)
.selectedItemWidth(10) //选中的导航点宽度
.selectedItemHeight(10)
.color('#777') //导航点颜色
.selectedColor('#fff') //选中的导航点颜色
.bottom(20) //底部边距
)
Tabs 标签页选项卡
controller: TabsController = new TabsController()
Tabs({index:$$this.Selectedindex,controller:this.controller}) { //方式一: 直接双向绑定索引
TabContent() {
Text('我是首页')
}.tabBar(this.tabs('首页', 0, $r('app.media.ic_home'))) //通过自定义构建样式实现自定义标签,传入参数控制高亮
TabContent() {
Text('我是2')
}.tabBar(this.tabs('发现', 1, $r('app.media.ic_find')))
...
}
.barPosition(BarPosition.End) //选项卡位置-底部
.vertical(false) //是否纵向,默认为false 是即为纵向布局选项卡
.scrollable(true) //是否滑动切换页面,默认为true
.animationDuration(0) //页面切换时间,0即为无动画效果
.barHeight(60) //选项卡高度,颜色等
.onChange((index: number) => {this.Selectedindex = index}) //方式二: 通过OnChange函数实现索引绑定
Badge气泡标记
Badge({
count: 2, //数字
// value: '三', //支持字符串,但value与count不能同时存在
style: {badgeSize: 16, badgeColor: '#f00', fontSize: 14}, //角标样式
position:BadgePosition.RightTop //角标位置,默认即为右上
}){
Column(){ //将需要加角标的组件写在内部
Image($r('app.media.kun'))
Text('消息')
}
}
Navigaiton 导航组件
可实现组件级路由,也可以作为仅需要顶部返回功能的页面模板使用
Navigation() {
}
.backgroundColor() // 背景色
.title() // 标题
.titleMode(NavigationTitleMode.Mini) // 标题+返回按钮的模式
.backButtonIcon()// 自定义返回按钮的图片(如果需要的话)
内容/交互组件
Text 文本 添加属性调节样式
Span (Text内嵌套文本)
Text(){
Span('我是')
Span('蔡徐坤')
}
image 图片 支持资源路径或者网络图片
Image($r('app.media.kun'))
Image('https://www.kun.com/image/kun.jpg')
Button 按钮
Button('按钮')
.type(ButtonType.Normal) //可通过指定成无形状之后再赋予圆角,实现圆角矩形
.borderRadius(8)
TextInput 文本输入框
TextInput({placeholder:'提示词',text:$$this.text})
.type(InputType.Password) //输入框类型
.showPasswordIcon(false) //密码类型时 小眼睛是否显示
.placeholderFont({size:16,style:FontStyle.Italic,weight:600}) //提示文本的样式
.placeholderColor('#666') //提示文本的颜色
TextArea 多行输入框
TextArea()
.maxLength(80) //最大字符数量80个
.showCounter(true) //显示当前数量 如:12/80
Radio 单选框
Radio({ value: 'Radio1', group: 'radioGroup' }) //值和组,单选框同一组只能选一个
.onChange((isChecked: boolean) => {
if(isChecked) {
//需要执行的操作
}
})
Radio({ value: 'Radio2', group: 'radioGroup' })
.onChange((isChecked: boolean) => {
if(isChecked) {
//需要执行的操作
}
})
CheckBox 多选框
CheckboxGroup({ group: 'good' }) //子Box与Group的group设为同一值后可进行联动
.onChange((res) => {
console.log(res.name.toString()) //传出的res.name即为当前选中的复选框name数组
// 其他逻辑处理
})
Checkbox({group:'good',name:'1'})
Checkbox({group:'good',name:'2'})
这次就写到这了,:-3