HarmonyOS 鸿蒙Next Tabs组件滑动页面切换时如何阻止左滑效果
HarmonyOS 鸿蒙Next Tabs组件滑动页面切换时如何阻止左滑效果 如图一,标签显示[首页]时, 继续左滑还有效果,这个该如何取消? 或者是否有其他组件可以代替它?
图二: 标签显示[发现]时, 继续右滑也有效果!
给Tabs设置onContentWillChange
就可以了,api12亲测有效
更多关于HarmonyOS 鸿蒙Next Tabs组件滑动页面切换时如何阻止左滑效果的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这个可以哦!感谢!之前API10的时候用手势拦截的!哈哈哈,
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17
compatibleSdkVersion: “5.0.0(12)” 使用这个方法怎么没效果,
这个方法不好使啦!可以使用 .edgeEffect(EdgeEffect.None)
,
另外去掉滑动切换的效果可以使用下面的属性并设置为0
scss
.animationDuration(0) //animationDuration为0关闭动画
最开始的解决办法,是设置tabs中第一个和最后一个,只允许右滑和左滑
@Entry
@Component
export default struct TabsModel {
@State @Watch('onBasketUpdated') currentIndex: number = 0
controller: TabsController = new TabsController()
onBasketUpdated() {
// TODO 通过@watch监听,这个值改变后,通过tabs的控制器中changeIndex方法,切换到制定页面
this.controller.changeIndex(this.currentIndex)
}
build() {
Column() {
Tabs({ controller: this.controller }) {
TabContent() {
}
.backgroundColor('#77FF')
.tabBar(this.TabBuilder(0, '综合'))
.gesture(PanGesture(new PanGestureOptions({ direction: PanDirection.Right })))
TabContent() {
}.tabBar(this.TabBuilder(1, '用户'))
TabContent() {
}.tabBar(this.TabBuilder(2, '讲股堂'))
TabContent() {
}.tabBar(this.TabBuilder(3, '资讯'))
TabContent() {
}.tabBar(this.TabBuilder(4, '社区'))
TabContent() {
}
.backgroundColor('#FF77')
.tabBar(this.TabBuilder(5, '话题'))
.gesture(PanGesture(new PanGestureOptions({ direction: PanDirection.Left })))
}
.onChange((index: number) => {
this.currentIndex = index // 把当前页签的数值传给currentIndex,来修改选定的页签的样式
})
.barMode(BarMode.Scrollable)
}
}
@Builder
TabBuilder(index: number, name: string) {
Column() {
Text(name)
.width(60)
.textAlign(TextAlign.Center)
.fontSize(this.currentIndex === index ? 18 : 14)
.fontWeight(this.currentIndex === index ? 700 : 400)
if (this.currentIndex === index) {
Divider().width(20).color('#ff5500').strokeWidth(2).margin({ top: 3 })
} else {
}
}
}
}
群里老哥,给的办法,确实没有滑动留白了,但是基本的滑动效果都没有了,滑的很突然
.onTouch(e => {
switch (e.type) {
case TouchType.Down:
this.startP = e.touches[0].x
break;
case TouchType.Up:
this.endP = e.touches[0].x
if (this.startP < this.endP) {
if (this.currentIndex > 0) {
this.currentIndex--;
}
} else if (this.startP > this.endP) {
if (this.currentIndex < 2) {
this.currentIndex++
}
}
break;
case TouchType.Move:
break;
}
})
.scrollable( boolean ) 这个方法可以控制是否能左右滑动
可以在 touch 事件的 move 中判断当前 Tab 的 index 是最大或者最小。如果在 move 中有滑动超出边界的趋势,可以将 .scrollable( false )
阻止滑动。
以上我没有实践,仅仅是思路···🤪
我设想的是xindex=0的时候不用吧scrollable设置为false这时候还是可以滑动的,而是在move的过程中·判断滑动的趋势在考虑是否要吧scrollable设置为false/true,
navigation组件好些不能左右切换!而且布局太乱了,真看不懂!
好吧+1
在HarmonyOS鸿蒙系统中,如果你想要阻止Next Tabs组件的左滑效果,可以通过以下方式实现:
Next Tabs组件的滑动行为通常是由其内部的滚动视图(ScrollView或类似组件)控制的。为了阻止左滑,你可以尝试以下几种方法:
-
设置滚动方向:检查Next Tabs组件或其父容器的滚动视图设置,看是否有属性可以控制滚动方向。如果可以将滚动方向限制为仅向右,那么左滑效果就会被自然阻止。
-
拦截触摸事件:如果直接设置滚动方向不可行,你可以尝试在Next Tabs组件上自定义一个触摸事件监听器,通过重写onTouchEvent方法来拦截并处理左滑手势,阻止其传递给内部的滚动视图。
-
使用自定义逻辑:在Next Tabs组件的切换逻辑中,添加判断条件,当检测到左滑手势时,不执行页面切换操作,从而间接实现阻止左滑的效果。
请注意,由于鸿蒙系统的UI组件库和API可能随着版本更新而发生变化,上述方法的具体实现可能会因系统版本和组件库的不同而有所差异。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html