HarmonyOS 鸿蒙Next ArkTs 如何实现一个水平的标题栏,标题栏项比较多时可以左右滑动,每次点击标题栏的某项时,该项居中
HarmonyOS 鸿蒙Next ArkTs 如何实现一个水平的标题栏,标题栏项比较多时可以左右滑动,每次点击标题栏的某项时,该项居中
如下两图,点击测试2 时候,测试2 居中,点击测试3 时候测试3居中,
如果点击基金,则因为基金在最左边,不做居中。
目前想通过List 实现,但是方案需要获取
1.当前点击ListItem 的宽度 2. ListItem 的左侧相对List 的距离, 3. List 整体的占用宽度。
这些如何在点击ListItem的时候获取呢?
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>)
}
}
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
自己写一个?
在ArkTS(ArkUI的TypeScript版本)中,实现一个可左右滑动的水平标题栏(TabBar),并使得点击某项时该项居中,你可以使用Swiper
组件来承载多个标题项(例如TabItem
),并设置其loop
属性为false
来禁止循环滑动。每个TabItem
可以是自定义的,包含文本或图标。
对于点击居中效果,你需要在点击事件中计算被点击项的位置,并动态调整Swiper
的scrollOffset
或使用Scroll
组件的滚动控制功能,使被点击的项居中显示。这通常涉及计算屏幕宽度、标题项宽度以及当前滚动位置。
如果问题依旧没法解决请加我微信,我的微信是itying888。