HarmonyOS 鸿蒙Next ArkTs 如何实现一个水平的标题栏,标题栏项比较多时可以左右滑动,每次点击标题栏的某项时,该项居中
HarmonyOS 鸿蒙Next ArkTs 如何实现一个水平的标题栏,标题栏项比较多时可以左右滑动,每次点击标题栏的某项时,该项居中
如下两图,点击测试2 时候,测试2 居中,点击测试3 时候测试3居中,
如果点击基金,则因为基金在最左边,不做居中。
目前想通过List 实现,但是方案需要获取
1.当前点击ListItem 的宽度 2. ListItem 的左侧相对List 的距离, 3. List 整体的占用宽度。
这些如何在点击ListItem的时候获取呢?
更多关于HarmonyOS 鸿蒙Next ArkTs 如何实现一个水平的标题栏,标题栏项比较多时可以左右滑动,每次点击标题栏的某项时,该项居中的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next ArkTs 如何实现一个水平的标题栏,标题栏项比较多时可以左右滑动,每次点击标题栏的某项时,该项居中的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
tab 要是能实现也行,主要是这个tab 项比较多的时候,需要支持滑动,点金某项的时候,还要自动滑动到中间
试了下tabs 的 .barMode(BarMode.Scrollable) 。貌似可以实现
嗯,这个挺普遍的需求,鸿蒙应该是有做的,只不过居中可能没法做的那么细,你可以试一下
注册一个监听、点击时,设置ScrollAlign.CENTER 居中 属性就可以了、不用那么麻烦
this.scrollController.scrollToIndex(index,true,ScrollAlign.CENTER);
开发者您好,我这里有一个Demo希望能帮到您:
[@Entry](/user/Entry) [@Component](/user/Component) struct indexHi{
build(){ Column(){ Tabs({barPosition:BarPosition.End}) { //内容区域 TabContent() { //在内容区域继续提供顶部导航栏 Column(){ Tabs({barPosition:BarPosition.Start}){ //顶部导航栏内容 TabContent(){ Text(‘关注的内容’).fontSize(30) }.tabBar(‘关注’) .backgroundColor(Color.Black) TabContent(){ Text(‘视频的内容’).fontSize(30) }.tabBar(‘视频’) .backgroundColor(Color.Blue) TabContent(){ Text(‘游戏的内容’).fontSize(30) }.tabBar(‘游戏’) .backgroundColor(Color.Brown) TabContent(){ Text(‘数码的内容’).fontSize(30) }.tabBar(‘数码’) .backgroundColor(Color.Gray) TabContent(){ Text(‘科技的内容’).fontSize(30) }.tabBar(‘科技’) .backgroundColor(Color.Orange) TabContent(){ Text(‘体育的内容’).fontSize(30) }.tabBar(‘体育’) .backgroundColor(Color.Pink) TabContent(){ Text(‘影视的内容’).fontSize(30) }.tabBar(‘影视’) .backgroundColor(Color.Red) TabContent(){ Text(‘人文的内容’).fontSize(30) }.tabBar(‘人文’) .backgroundColor(Color.Yellow) } //设置导航栏(滚动) .barMode(BarMode.Scrollable) } .width(‘100%’) } .tabBar(‘首页’)
TabContent() { Text(<span class="hljs-string">'推荐的内容'</span>).fontSize(<span class="hljs-number">30</span>) } .tabBar(<span class="hljs-string">'推荐'</span>) TabContent() { Text(<span class="hljs-string">'发现的内容'</span>).fontSize(<span class="hljs-number">30</span>) } .tabBar(<span class="hljs-string">'发现'</span>) TabContent() { Text(<span class="hljs-string">'我的内容'</span>).fontSize(<span class="hljs-number">30</span>) } .tabBar(<span class="hljs-string">"我的"</span>) } <span class="hljs-comment">//设置是否滚动切换,默认是滚动的,false禁止滚动切换</span> .scrollable(<span class="hljs-literal">false</span>)
} } }
自己写一个?
在ArkTS(ArkUI的TypeScript版本)中,实现一个可左右滑动的水平标题栏(TabBar),并使得点击某项时该项居中,你可以使用Swiper
组件来承载多个标题项(例如TabItem
),并设置其loop
属性为false
来禁止循环滑动。每个TabItem
可以是自定义的,包含文本或图标。
对于点击居中效果,你需要在点击事件中计算被点击项的位置,并动态调整Swiper
的scrollOffset
或使用Scroll
组件的滚动控制功能,使被点击的项居中显示。这通常涉及计算屏幕宽度、标题项宽度以及当前滚动位置。
HarmonyOS 鸿蒙Next仿小米商城项目实战学习:https://www.itying.com/goods-1204.html