NestedScrollView 禁止滚动
时间: 2023-08-28 10:06:57 浏览: 222
要禁止 NestedScrollView 的滚动,可以通过设置其子View的高度来实现。具体的做法是,给子View设置一个固定的高度,比如使用 match_parent 或者具体的像素值。这样,NestedScrollView 就无法滚动了。如果需要动态控制子View的高度,可以在代码中设置其 LayoutParams 的高度属性。
相关问题
NestedScrollView 滚动条高度
NestedScrollView 是一个支持嵌套滑动的 ScrollView。它的滚动条高度可以通过设置 style 中的属性来修改。
具体来说,可以在 style 中增加 android:scrollbarThumbVertical 和 android:scrollbarTrackVertical 两个属性来分别设置滚动条的滑块和轨道的样式,同时还可以设置 android:scrollbarSize 属性来定义滚动条的宽度。
例如,下面的样式设置了滚动条的滑块为蓝色,轨道为灰色,宽度为 4dp:
```xml
<style name="MyNestedScrollViewStyle" parent="Widget.Design.NestedScrollView">
<item name="android:scrollbarThumbVertical">@color/blue</item>
<item name="android:scrollbarTrackVertical">@color/grey</item>
<item name="android:scrollbarSize">4dp</item>
</style>
```
需要注意的是,如果想要修改滚动条的样式,还需要将 NestedScrollView 的属性 android:scrollbars 设置为 vertical,以启用滚动条。
Flutter nestedscrollview TabView 滚动到列表某一项
要实现 Flutter NestedScrollView 和 TabView 滚动到列表某一项,可以使用 ScrollController 和 TabController 来实现。
步骤如下:
1. 在 NestedScrollView 中添加 controller 属性,用于监听滚动事件。
2. 在 TabView 中添加 controller 属性,用于控制 Tab 切换。
3. 在列表中添加 controller 属性,用于监听列表滚动事件。
4. 在 TabView 中添加 onTap 属性,用于监听 Tab 切换事件。
5. 在 onTap 事件中,使用 ScrollController 和 TabController 来控制列表和 TabView 的滚动和切换。
具体实现细节可以参考以下代码:
```dart
class MyPage extends StatefulWidget {
@override
_MyPageState createState() => _MyPageState();
}
class _MyPageState extends State<MyPage> with SingleTickerProviderStateMixin {
TabController _controller;
ScrollController _scrollController;
List _tabs = ['Tab1', 'Tab2', 'Tab3', 'Tab4', 'Tab5'];
List<Widget> _tabViews = [];
@override
void initState() {
super.initState();
_controller = TabController(length: _tabs.length, vsync: this);
_scrollController = ScrollController();
for (int i = 0; i < _tabs.length; i++) {
_tabViews.add(ListView.builder(
controller: _scrollController,
itemCount: 50,
itemBuilder: (context, index) {
return ListTile(
title: Text('${_tabs[i]} - Item $index'),
);
},
));
}
}
@override
void dispose() {
_controller.dispose();
_scrollController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: NestedScrollView(
controller: _scrollController,
headerSliverBuilder: (context, innerBoxIsScrolled) {
return [
SliverAppBar(
title: Text('NestedScrollView'),
pinned: true,
floating: true,
snap: true,
bottom: TabBar(
controller: _controller,
tabs: _tabs.map((tab) => Tab(text: tab)).toList(),
),
),
];
},
body: TabBarView(
controller: _controller,
children: _tabViews,
),
),
);
}
}
```
以上代码中,我们使用了一个 List 来存储 Tab 标题,使用 for 循环来创建 TabView,每个 TabView 都是一个 ListView,通过传入不同的数据来区分不同的 TabView,同时在 ListView 中添加了 controller 属性来监听列表滚动事件。
在 TabBar 中添加了 onTap 属性,当 Tab 切换时,使用 _controller.animateTo() 方法来控制 TabView 的滚动位置,同时也使用 _scrollController.animateTo() 方法来控制列表的滚动位置。
这样就可以实现在 NestedScrollView 和 TabView 中滚动到列表某一项的效果了。