Я писал собственный модуль для Android, который обертывает BottomSheetBehavior.
Очень простое BottomSheetBehavior может быть реализовано так https://gist.github.com/cesardeazevedo/a4dc4ed12df33fe1877fc6cea42475ae
В первую очередь, с которой я столкнулся, вся страница должна быть дочерним элементом CoordinatorLayout и BottomSheetBehavior в конце его.
Поэтому мне пришлось написать 2 собственных модуля, <CoordinatorLayout />
и <BottomSheetBehavior />
.
Это оболочка bottomSheetBehavior.
BottomSheetBehaviorManager.java
public class BottomSheetBehaviorManager extends ViewGroupManager<BottomSheetBehaviorView> {
@Override
public BottomSheetBehaviorView createViewInstance(ThemedReactContext context) {
return new BottomSheetBehaviorView(context);
}
}
BottomSheetBehaviorView.java
public class BottomSheetBehaviorView extends RelativeLayout {
public BottomSheetBehaviorView(Context context) {
super(context);
int width = ViewGroup.LayoutParams.WRAP_CONTENT;
int height = ViewGroup.LayoutParams.WRAP_CONTENT;
// int height = 1000; // fixed a height works, it only slide up half of the screen
CoordinatorLayout.LayoutParams params = new CoordinatorLayout.LayoutParams(width, height);
params.setBehavior(new BottomSheetBehavior());
this.setLayoutParams(params);
BottomSheetBehavior<BottomSheetBehaviorView> bottomSheetBehavior = BottomSheetBehavior.from(this);
bottomSheetBehavior.setHideable(false);
bottomSheetBehavior.setPeekHeight(200);
}
}
И мой реагирующий компонент станет таким.
index.android.js
return () {
<CoordinatorLayout style={{flex: 1}}>
<View><!--app--></View>
<BottomSheetBehavior>
<View style={{height: 300}}> <!--height doesnt work-->
<Text>BottomSheetBehavior !</Text>
</View>
</BottomSheetBehavior>
</CoordinatorLayout>
)
И он работает!
Но я изо всех сил пытался заставить BottomSheet обернуть свои дочерние элементы с помощью wrap_content
, он не должен был показывать весь экран, он должен просканировать только завернутый контент (в этом случае текст lorem ipsum), он работает с компонентами Android, но не работает с реагирующими компонентами. Итак, как сделать RelativeLayout
для обертывания реагирующего компонента <View style={{height: 300}} />
? Я также попытался реализовать некоторый меру shadownode, но не работал должным образом, я не знаю, как они работают.
Я добавил этот пример в мой github, потому что каждый хочет попробовать его. https://github.com/cesardeazevedo/react-native-bottom-sheet-behavior