Привязка пользовательского действия / представления Android к React Native

#android #react-native

#Android #react-native

Вопрос:

Проблема

Большая часть моего приложения находится на React Native, и в настоящее время я перехожу на полные собственные сборки (iOS и Android). Я решил сделать это по частям и создавать только определенные компоненты за раз. Один из имеющихся у меня компонентов является репрезентативным для поведения на нижней панели Android. В качестве примеров из реальной жизни можно привести новый дизайн Lyft. Компонент BottomSheet не отображается, хотя я установил высоту просмотра. Lyft.

Попытка решения

Я все еще привыкаю к Android Studio и создаю приложения для Android, поэтому очень рад услышать об улучшениях моего подхода. Должен ли я использовать ViewGroup? Должен ли я использовать действие, и если да, то возможно ли одновременное выполнение двух действий (например, с точки зрения фотографии Lyft выше, является ли действие «Просмотр карты 1», а нижний лист — отдельным действием?)?

BottomSheetView

 public class BottomSheetView extends ViewGroup {

    private BottomSheetBehavior mBottomSheetBehavior;

    public BottomSheetActivity(Context context) {
        super(context);
        init();
    }

    private void init() {
        inflate(getContext(), R.layout.bottom_sheet, this);
        CoordinatorLayout coordinaterLayout = findViewById(R.id.coordinate_layout);
        View bottomSheet = coordinaterLayout.findViewById(R.id.bottom_sheet_component);
        mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
        mBottomSheetBehavior.setHideable(false);
        mBottomSheetBehavior.setPeekHeight(200);
    }

    @Override
    protected void onLayout(boolean b, int i, int i1, int i2, int i3) {
    }
}

  

BottomSheetManager

 public class BottomSheetManager extends ViewGroupManager<BottomSheetView> {
    public static final String REACT_CLASS = "BottomSheet";

    private BottomSheetView bottomSheet;

    @Override
    public String getName() {
        return REACT_CLASS;
    }

    @Override
    protected BottomSheetView createViewInstance(ThemedReactContext reactContext) {
        return new BottomSheetView(reactContext);
    }

}
  

BottomSheetPackage

 ...
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
    return Arrays.<ViewManager>asList(new BottomSheetManager());
}
  

React Native

 import react, { Component } from 'react';
import { requireNativeComponent } from 'react-native';
const BottomSheet = requireNativeComponent('BottomSheet', SomeClass);

class SomeClass extends Component {
    render() {
      return (<BottomSheet />);
    }
}
  

Комментарии:

1. Я также сталкиваюсь с той же проблемой. Вы нашли какое-либо решение?

Ответ №1:

Я столкнулся с аналогичной проблемой и исправил ее с помощью фрагмента. Текущая версия React Native (0.66) содержит информацию с примером кода о том, как ее реализовать:

https://reactnative.dev/docs/native-components-android#1-create-a-fragment