是否可以在新的 androidviewpager2
组件中启用-禁用滑动?
问问题
36927 次
4 回答
277
现在可以使用启用-禁用viewpager2
刷卡Version 1.0.0-alpha02
采用implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'
新功能
- 能够禁用用户输入 (
setUserInputEnabled
,isUserInputEnabled
)
API 更改
ViewPager2
班级决赛
Bug修复
FragmentStateAdapter
稳定性修复
在 viewpager2 中禁用滑动的示例代码
myViewPager2.setUserInputEnabled(false);
在 viewpager2 中启用滑动的示例代码
myViewPager2.setUserInputEnabled(true);
于 2019-03-16T05:40:01.323 回答
8
如果您使用的是 Android 数据绑定,您可以简单地将其禁用您的布局 xml 文件。
app:userInputEnabled="@{false}"
于 2021-02-16T14:36:44.773 回答
6
引擎盖下ViewPager2
用于RecyclerView
膨胀片段视图,但它RecyclerView
是隐藏的,因此它们使其更加白痴证明。
val rv : RecyclerView = viewPager.getChildAt(0) as RecyclerView
rv.layoutManager = NonScrollingLayoutManager( rv.context, rv.layoutManager as LinearLayoutManager)
RecyclerView
Hacky 方法是通过包装布局管理器,让子级位于位置零,并禁用布局管理器中的滚动:
inner class NonScrollingLayoutManager(context: Context, val layoutManager: LinearLayoutManager) :
LinearLayoutManager(context, layoutManager.orientation, layoutManager.reverseLayout) {
override fun canScrollVertically(): Boolean = layoutManager.orientation == HORIZONTAL
override fun canScrollHorizontally(): Boolean = layoutManager.orientation == VERTICAL
}
请注意,如果 API 更改了用于 RecyclerView 的布局管理器,即它们远离LinearLayoutManager
this 将无法正常工作,并且需要重写一些方法并确保调用超级方法。
第二种方法是子类ViewPager2
,ViewGroup
然后在将触摸事件分派到子视图(如您所料RecyclerView
)之前执行拦截触摸事件的魔法,并注意不要阻止点击。
于 2019-03-06T08:59:58.783 回答
6
viewPager2.setUserInputEnabled(false);
于 2020-12-03T09:41:52.297 回答