Box c фиксированными размерами, в котором внутри AndroidView с модификатором fillMaxSize()
В AndroidView лежит наследник RecyclerView (далее по тексту - CustomRecyclerView) с GridLayoutManager и перегруженными методами тач эвентов, который не прокручивается (я так полагаю, что из-за того, что ModalBottomSheetLayout перехватывает тач эвенты, потому что в onInterceptTouchEvent у CustomRecyclerView мне приходит ACTION_DOWN -> ACTION_CANCEL)
вообще хочется реализовать поведение, при котором я могу скроллить внутри сам CustomRecyclerView, но при этом если у меня происходит его overScroll, то тогда отдавать события в ModalBottomSheetLayout (но думаю, что там нужно прям сильно извернуться)
но первый вопрос - как вообще заблокировать перехват событий внешним ModalBottomSheetLayout?
вроде как есть возможность повесить событие на внутренний элемент через
Modifier.pointerInput(Unit) {
detectDragGestures { change, dragAmount ->
}
}
но получается, что единственный вариант скролла в такой реализации - это програмно скроллить сам CustomRecyclerView и пользовательский скролл с его событиями мы теряем?
или лучше заблокировать как-то тач события внешних контейнеров (правда, непонятно на каком из типов события) в самом наследнике CustomRecyclerView?
всем привет проблема пока что осталась попробовал сделать как в рекомендации гугла https://developer.android.com/jetpack/compose/touch-input/pointer-input/scroll#parent-compose-child-view но не помогло (возможно потому, что сделал неверно) @Composable fun FullHeightBottomSheet( swipeableState: SwipeableState<States> ) { val nestedScrollConnection = remember { object : NestedScrollConnection { override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset { return Offset.Zero } } } BoxWithConstraints { val constraintsScope = this val maxHeight = with(LocalDensity.current) { constraintsScope.maxHeight.toPx() } Box( Modifier .offset { IntOffset( 0, swipeableState.offset.value.roundToInt() ) } .swipeable( state = swipeableState, orientation = Orientation.Vertical, anchors = mapOf( 0f to States.EXPANDED, maxHeight to States.COLLAPSED, ) ) .nestedScroll( nestedScrollConnection ) .clipToBounds() ) { AndroidView( modifier = Modifier .fillMaxSize() .padding(top = 8.dp), factory = { ctx -> CustomRecyclerView(ctx).also { view -> ViewCompat.setNestedScrollingEnabled(view, true) } } ) } } }
Обсуждают сегодня