如何禁用 ViewPager2 中的滑动?
How to disable swiping in ViewPager2?
是否可以在新的 android viewpager2
组件中启用/禁用滑动?
在引擎盖下 ViewPager2
与 RecyclerView
一起用于膨胀片段视图,但 RecyclerView
是隐藏的,因此它们使其更加白痴证明。
val rv : RecyclerView = viewPager.getChildAt(0) as RecyclerView
rv.layoutManager = NonScrollingLayoutManager( rv.context, rv.layoutManager as LinearLayoutManager)
Hacky 方法是让子元素位于零位置,即 RecyclerView
并通过包装布局管理器来禁用布局管理器中的滚动:
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
移开,这将不起作用,并且需要重写一些方法并确保超级方法是叫。
第二种方法是 ViewPager2
的子类,它是 ViewGroup
,然后在触摸事件被分派到子视图之前(正如您猜想的那样,RecyclerView
) 并注意不要阻止点击。
现在可以使用 Version 1.0.0-alpha02
启用/禁用滑动 viewpager2
使用implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'
新功能
- 能够禁用用户输入(
setUserInputEnabled
、isUserInputEnabled
)
API 变化
ViewPager2
class 决赛
错误修复
FragmentStateAdapter
稳定性修复
用于在 viewpager2 中禁用滑动的示例代码
myViewPager2.setUserInputEnabled(false);
在 viewpager2 中启用滑动的示例代码
myViewPager2.setUserInputEnabled(true);
viewPager2.setUserInputEnabled(false);
如果您正在使用 Android 数据绑定,您只需在布局 xml 文件中禁用它即可。
app:userInputEnabled="@{false}"
是否可以在新的 android viewpager2
组件中启用/禁用滑动?
在引擎盖下 ViewPager2
与 RecyclerView
一起用于膨胀片段视图,但 RecyclerView
是隐藏的,因此它们使其更加白痴证明。
val rv : RecyclerView = viewPager.getChildAt(0) as RecyclerView
rv.layoutManager = NonScrollingLayoutManager( rv.context, rv.layoutManager as LinearLayoutManager)
Hacky 方法是让子元素位于零位置,即 RecyclerView
并通过包装布局管理器来禁用布局管理器中的滚动:
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
移开,这将不起作用,并且需要重写一些方法并确保超级方法是叫。
第二种方法是 ViewPager2
的子类,它是 ViewGroup
,然后在触摸事件被分派到子视图之前(正如您猜想的那样,RecyclerView
) 并注意不要阻止点击。
现在可以使用 Version 1.0.0-alpha02
viewpager2
使用implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'
新功能
- 能够禁用用户输入(
setUserInputEnabled
、isUserInputEnabled
)
API 变化
ViewPager2
class 决赛
错误修复
FragmentStateAdapter
稳定性修复
用于在 viewpager2 中禁用滑动的示例代码
myViewPager2.setUserInputEnabled(false);
在 viewpager2 中启用滑动的示例代码
myViewPager2.setUserInputEnabled(true);
viewPager2.setUserInputEnabled(false);
如果您正在使用 Android 数据绑定,您只需在布局 xml 文件中禁用它即可。
app:userInputEnabled="@{false}"