android - 将自定义 Android Activity/ View 链接到 React Native

标签 android react-native

问题

我的大部分应用都在 React Native 上,目前正在过渡到完整的原生构建(iOS 和 Android)。我决定零敲碎打,一次只构建某些组件。我拥有的组件之一是代表 Androids Bottom Sheet Behavior 。现实生活中的例子包括 Lyft 的新设计。即使我设置了窥视高度,BottomSheet 组件也没有显示。 Lyft

尝试的解决方案

我仍然习惯于 Android Studio 并为 Android 构建应用程序,因此非常灵活地听到我的方法的改进。我应该使用 ViewGroup 吗?我是否应该使用一项 Activity ,如果可以,是否可以同时运行 2 项 Activity (就像上面的 Lyft 照片一样, map View 1 Activity 和底页是单独的 Activity ?)?

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 原生
import react, { Component } from 'react';
import { requireNativeComponent } from 'react-native';
const BottomSheet = requireNativeComponent('BottomSheet', SomeClass);

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

最佳答案

我遇到了类似的问题并使用 进行了修复 fragment .
当前 React Native 版本 (0.66) 有关于如何实现它的示例代码的信息:
https://reactnative.dev/docs/native-components-android#1-create-a-fragment

关于android - 将自定义 Android Activity/ View 链接到 React Native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55156152/

相关文章:

Java 文件路径 Android

android - 对 Android 应用程序添加到的项目以外的项目进行 Firebase 身份验证

android - react native 火力地堡通知崩溃

react-native - 如何在react-apollo graphql查询中正确使用动态变量?

android - 无法在 Expo React Native 项目中连接我的 Android 手机

android - 如何打开存储在内存中的 PDF

android - 意外强制关闭

java - 如何避免对包装类上实现的每个方法的包装对象进行空检查

react-native run-ios 不运行应用程序,但从 xcode 构建它可以工作

javascript - 在 React Native 中运行 mount() 不可能吗?