murguupluoglu
¿Es posible habilitar o deshabilitar el deslizamiento en el nuevo Android? viewpager2
¿componente?
Pregúntale a Nilesh
Ahora es posible habilitar o deshabilitar el deslizamiento viewpager2
usando Version 1.0.0-alpha02
Usar implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'
Nuevas características
- Posibilidad de deshabilitar la entrada del usuario (
setUserInputEnabled
,isUserInputEnabled
)
Cambios en la API
ViewPager2
final de clase
Corrección de errores
FragmentStateAdapter
correcciones de estabilidad
CÓDIGO DE MUESTRA para deshabilitar el deslizamiento en viewpager2
myViewPager2.setUserInputEnabled(false);
CÓDIGO DE MUESTRA para permitir deslizar en viewpager2
myViewPager2.setUserInputEnabled(true);
-
Perfecto. Ahora puedo tener un fragmento de mapa y desplazarlo y deslizar el dedo para los otros fragmentos.
– FrankKrumnow
19 oct 2020 a las 11:19
-
¿Esto también deshabilita tocar las pestañas para cambiar la pestaña actual a otra pestaña específica?
– Andrei Malla
4 de noviembre de 2020 a las 12:05
-
¿Hay alguna manera de hacer esto usando xml?
– todos
18 de marzo de 2021 a las 6:03
-
@aLL no hay forma de hacer esto usando XML en este momento
– Pregúntale a Nilesh
18 de marzo de 2021 a las 6:37
Si está utilizando el enlace de datos de Android, simplemente puede deshabilitarlo en su archivo xml de diseño.
app:userInputEnabled="@{false}"
Yaminí
viewPager2.setUserInputEnabled(false);
Nikola Despotoski
Bajo el capó ViewPager2
funciona con RecyclerView
para inflar las vistas de fragmentos, pero el RecyclerView
está oculto, por lo que lo hacen más a prueba de idiotas.
val rv : RecyclerView = viewPager.getChildAt(0) as RecyclerView
rv.layoutManager = NonScrollingLayoutManager( rv.context, rv.layoutManager as LinearLayoutManager)
Hacky forma es conseguir que el niño en la posición cero que es el RecyclerView
y deshabilite el desplazamiento en el administrador de diseño, envolviendo el administrador de diseño:
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
}
Tenga en cuenta que si la API cambia el administrador de diseño utilizado para RecyclerView, es decir, se alejan del LinearLayoutManager
esto no funcionará y necesitará algunos métodos anulados y garantizar que se llamen a los supermétodos.
El segundo enfoque es la subclase ViewPager2
cual es ViewGroup
y luego haga la magia de interceptar eventos táctiles, antes de que se envíen a las vistas secundarias (como supondrá que el RecyclerView
) y tenga cuidado de no impedir los clics.