当前位置:   article > 正文

学习鸿蒙基础(10)

学习鸿蒙基础(10)

目录

一、轮播组件 Swiper

二、列表-List

 1、简单的List

2、嵌套的List

三、Tabs容器组件

1、系统自带tabs案例

2、自定义导航栏:


一、轮播组件 Swiper
  1. @Entry
  2. @Component
  3. struct PageSwiper {
  4. @State message: string = 'Hello World'
  5. private SwCon: SwiperController = new SwiperController()
  6. build() {
  7. Column() {
  8. Swiper(this.SwCon) {
  9. Text("龙").backgroundColor(Color.Red).textStyle()
  10. Text("兔").backgroundColor(Color.Yellow).textStyle()
  11. Text("神").backgroundColor(Color.Orange).textStyle()
  12. }
  13. // .autoPlay(true)
  14. .interval(2000)
  15. .indicatorStyle({
  16. color: Color.White,
  17. selectedColor: Color.Pink,
  18. size: 20
  19. }).onChange(index=>{
  20. console.log(`${index}`)
  21. })
  22. // .vertical(true)
  23. Row() {
  24. Button("上一个").onClick(v => {
  25. this.SwCon.showPrevious();
  26. }).margin({ top: 10, right: 10 })
  27. Button("下一个").onClick(v => {
  28. this.SwCon.showNext()
  29. }).margin({ left: 10, top: 10 })
  30. }.width("100%").justifyContent(FlexAlign.Center)
  31. }
  32. .height('100%')
  33. }
  34. }
  35. @Extend(Text) function textStyle() {
  36. .width("100%").height(200)
  37. }
二、列表-List

列表是一种复杂的容器,当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求(如通讯录.音乐列表、购物清单等)。
ListltemGroup用于列表数据的分组展示,其子组件也是Listltem。Listltem表示单个列表项,可以包含单个子组件。

 1、简单的List
  1. @Entry
  2. @Component
  3. struct PageList {
  4. @State message: string = 'Hello World'
  5. @State list: string[] = ["子(鼠)", "丑(牛)", "寅(虎)", "卯(兔)"
  6. , "辰(龙)", "巳(蛇)", "午(马)", "未(羊)", "申(猴)", "酉(鸡)", "戌(狗)", "亥(猪)"]
  7. ScrollList: Scroller = new Scroller()
  8. @State isNoBottom:boolean=true;
  9. build() {
  10. Row() {
  11. Column() {
  12. List({ scroller: this.ScrollList }) {
  13. ForEach(this.list, (item, index) => {
  14. ListItem() {
  15. Text(item).fontSize(25)
  16. }
  17. .height(100)
  18. .width("100%")
  19. .backgroundColor(Color.Pink)
  20. .align(Alignment.Center) //控制item的字体位置
  21. .margin({ top: 10 })
  22. .swipeAction({ //侧滑删除的样式
  23. end: this.Delete(index)
  24. })
  25. })
  26. }.width("100%").height("50%").backgroundColor(Color.Gray)
  27. // .listDirection(Axis.Horizontal)//控制滑动的方向
  28. .alignListItem(ListItemAlign.Center) //控制list内部的位置
  29. .onScrollIndex((star,end)=>{
  30. if(this.list.length-1===end&&this.isNoBottom){
  31. this.isNoBottom=false
  32. console.log(end+"---------------到底了")
  33. }
  34. })
  35. Button("回顶部").onClick(v => {
  36. this.ScrollList.scrollToIndex(0)
  37. }).margin({top:10})
  38. }
  39. .height('100%').width('100%').justifyContent(FlexAlign.Center)
  40. }.height('100%')
  41. }
  42. @Builder
  43. Delete(index: number) {
  44. Text("删除")
  45. .backgroundColor(Color.Orange)
  46. .height(100)
  47. .width(80)
  48. .textAlign(TextAlign.Center)
  49. .fontSize(26)
  50. .fontColor(Color.Grey)
  51. .onClick(v => {
  52. this.list.splice(index, 1)
  53. })
  54. }
  55. }
2、嵌套的List
  1. @Entry
  2. @Component
  3. struct PageList2 {
  4. @State message: string = 'Hello World'
  5. @State cityList: Object[] =
  6. [{ type: "A", name: ["安顺", "安庆", "安康"] }, { type: "B", name: ["北京", "北大荒", "保定"] }, { type: "C", name: ["长春", "长安", "长冶"] }]
  7. // 嵌套的list列表。
  8. build() {
  9. Row() {
  10. List(){
  11. ForEach(this.cityList,item=>{
  12. ListItemGroup({header:this.head(item.type)}){
  13. ForEach(item.name,item1=>{
  14. ListItem(){
  15. Text(item1)
  16. }.height(80).width('100%').align(Alignment.Start)
  17. })
  18. }
  19. })
  20. }.width('100%').height('30%').margin({left:10})
  21. .sticky(StickyStyle.Header)//悬浮一级目录
  22. }
  23. .height('100%')
  24. }
  25. @Builder
  26. head(type){
  27. Text(type).fontSize(25).fontColor(Color.Red)
  28. .backgroundColor(Color.White)
  29. }
  30. }
三、Tabs容器组件

当页面信息较多时,为了让用户能够聚焦于当前显示的内容,需要对页面内容进行分类,提高页面空间利用率。[Tabs]组件可以在一个页面内快速实现视图内容的切换,一方面提升查找信息的效率,另一方面精简用户单次获取到的信息量。
Tabs组件的页面组成包含两个部分,分别是TabContent和TabBar。TabContent是内容页,TabBar是导航页签栏,页面结构如下图所示,根据不同的导航类型,布局会有区别,可以分为底部导航、顶部导航、侧边导航,其导航栏分别位于底部、顶部和侧边。

 

每一个TabContent对应的内容需要有一个页签,可以通过TabContent的tabBar属性进行配置。在如下TabContent组件上设置属性tabBar,可以设置其对应页签中的内容,tabBar作为内容的页签。

1、系统自带tabs案例
  1. @Entry
  2. @Component
  3. struct PageTabs {
  4. @State message: string = 'Hello World'
  5. build() {
  6. Tabs({barPosition:BarPosition.End}){
  7. TabContent(){
  8. spring()
  9. }.tabBar("春天")
  10. TabContent(){
  11. summmer()
  12. }.tabBar("夏天")
  13. TabContent(){
  14. autumn()
  15. }.tabBar("秋天")
  16. }
  17. // .vertical(true)
  18. .scrollable(true)
  19. .barMode(BarMode.Scrollable)//tabbar可以滚动
  20. }
  21. }
  22. @Component
  23. struct spring{
  24. build(){
  25. Row(){
  26. Text("春天来了")
  27. }
  28. }
  29. }
  30. @Component
  31. struct summmer{
  32. build(){
  33. Row(){
  34. Text("夏天来了")
  35. }
  36. }
  37. }
  38. @Component
  39. struct autumn{
  40. build(){
  41. Row(){
  42. Text("秋天来了")
  43. }
  44. }
  45. }
2、自定义导航栏:

对于底部导航栏一般作为应用主页面功能区分,为了更好的用户体验,会组合文字以及对应语义图标表示页签内容,这种情况下,需要自定义导航页签的样式。

 

  1. @Entry
  2. @Component
  3. struct PageTabs {
  4. @State message: string = 'Hello World'
  5. @State indexSelected:number=0
  6. controller:TabsController=new TabsController()
  7. @Builder
  8. tabStyle(path:string,name:string ,pathSelected:string,index:number){
  9. Column(){
  10. Image(this.indexSelected===index?pathSelected:path).size({width:25,height:25})
  11. Text(name).fontColor(this.indexSelected===index?"#14c145":Color.Black)
  12. }.width("100%").height(50).onClick(v=>{
  13. this.indexSelected=index
  14. this.controller.changeIndex(index)
  15. })
  16. }
  17. build() {
  18. Tabs({barPosition:BarPosition.End,
  19. controller:this.controller}){
  20. TabContent(){
  21. spring()
  22. }.tabBar(this.tabStyle('images/admin_.png',"春天",'images/admin.png',0))
  23. TabContent(){
  24. summmer()
  25. }.tabBar(this.tabStyle('images/baoxiu_.png',"夏天",'images/baoxiu.png',1))
  26. TabContent(){
  27. autumn()
  28. }.tabBar(this.tabStyle('images/hetong_.png',"秋天",'images/hetong.png',2))
  29. }
  30. // .vertical(true)
  31. .scrollable(true)
  32. .onChange(index=>{
  33. console.log(index+"--------滑动到")
  34. this.indexSelected=index
  35. })
  36. // .barMode(BarMode.Scrollable)//tabbar可以滚动 会导致tabitem充满屏幕
  37. }
  38. }
  39. @Component
  40. struct spring{
  41. build(){
  42. Row(){
  43. Text("春天来了")
  44. }
  45. }
  46. }
  47. @Component
  48. struct summmer{
  49. build(){
  50. Row(){
  51. Text("夏天来了")
  52. }
  53. }
  54. }
  55. @Component
  56. struct autumn{
  57. build(){
  58. Row(){
  59. Text("秋天来了")
  60. }
  61. }
  62. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/339462
推荐阅读
相关标签
  

闽ICP备14008679号