reactjs – 在React Native上为android创建自定义UI组件失败.应
由于Facebook登录按钮本身可用,我想要一个适用于
Android的React Native包装器组件.所以,我试着写它.但应用程序甚至在开始之前就崩溃了.
我的github存储库是: https://github.com/lalith26/react-native-fb-login-android 我做了以下事情: >我为LoginButton facebook小部件创建了Manager: https://github.com/lalith26/react-native-fb-login-android/blob/master/android/app/src/main/java/com/fbloginbutton2/FBLoginButtonManager.java >我创建了一个扩展MainReactPackage的ReactPackage: https://github.com/lalith26/react-native-fb-login-android/blob/master/android/app/src/main/java/com/fbloginbutton2/FBLoginButtonReactPackage.java >我在MainActivity中添加了新的ReactPackage: https://github.com/lalith26/react-native-fb-login-android/blob/master/android/app/src/main/java/com/fbloginbutton2/MainActivity.java#L29 >我包含了facebook登录sdk的gradle依赖 https://github.com/lalith26/react-native-fb-login-android/blob/master/android/app/build.gradle#L28 >我使JS组件包装了Native组件: https://github.com/lalith26/react-native-fb-login-android/blob/master/fblogin.js >最后我使用了JS组件: https://github.com/lalith26/react-native-fb-login-android/blob/master/index.android.js#L21 我通过网络阅读并发现必须传递propTypes.我也试过了.但应用程序在启动时崩溃了.我无法看到任何日志.所以,我无法找到问题的实际原因. 有什么我只是做错了.请帮忙.. 我通过logcat访问了模拟器的日志.表明:
我发现很难找到关于这个问题的简单示例或文档,所以这里是我的代码示例,扩展了KenBurnsView(
https://github.com/flavioarfaria/KenBurnsView),我希望这个例子简单而有用:
KenBurnsViewManager.Java: import com.flaviofaria.kenburnsview.KenBurnsView; import com.facebook.react.uimanager.SimpleViewManager; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.ReactProp; import java.io.InputStream; import android.graphics.drawable.Drawable; import android.util.Log; public class KenBurnsViewManager extends SimpleViewManager<KenBurnsView> { public static final String REACT_CLASS = "KenBurnsView"; private ThemedReactContext ctx; @Override public String getName() { return REACT_CLASS; } @Override protected KenBurnsView createViewInstance(ThemedReactContext context) { ctx = context; return new KenBurnsView(context); } @ReactProp(name = "source") public void setSource(KenBurnsView view,String source) { try { InputStream ims = ctx.getAssets().open("images/" + source); Drawable d = Drawable.createFromStream(ims,null); view.setImageDrawable(d); } catch (Exception ex) { Log.e("KenBurnsView","setSource",ex); } } } KenBurnsViewPackage.Java: import com.facebook.react.ReactPackage; import com.facebook.react.bridge.JavaScriptModule; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.uimanager.ViewManager; import java.util.Collections; import java.util.List; import java.util.Arrays; import java.util.ArrayList; public class KenBurnsViewPackage implements ReactPackage { @Override public List<NativeModule> createNativeModules( ReactApplicationContext reactContext) { List<NativeModule> modules = new ArrayList<>(); return modules; } @Override public List<ViewManager> createViewManagers( ReactApplicationContext reactContext) { return Arrays.<ViewManager>asList( new KenBurnsViewManager() ); } @Override public List<Class<? extends JavaScriptModule>> createJSModules() { return Collections.emptyList(); } } 更新MainActivity.Java: mReactInstanceManager = ReactInstanceManager.builder() .setApplication(getApplication()) .setBundleAssetName("index.android.bundle") .setJSMainModuleName("index.android") .addPackage(new MainReactPackage()) .addPackage(new KenBurnsViewPackage()) // <- add package .setUseDeveloperSupport(BuildConfig.DEBUG) .setInitialLifecycleState(LifecycleState.RESUMED) .build(); 更新android / app / build.gradle: dependencies { compile fileTree(dir: "libs",include: ["*.jar"]) compile "com.android.support:appcompat-v7:23.0.1" compile "com.facebook.react:react-native:0.16.+" compile "com.flaviofaria:kenburnsview:1.0.6" } KenBurnsView.js: var { requireNativeComponent,PropTypes,View } = require('react-native'); var iface = { propTypes: { ...View.propTypes,source: PropTypes.string,},}; module.exports = requireNativeComponent('KenBurnsView',iface); 就是这样,现在你可以添加新的自定义KenBurnsView组件,例如: var KenBurnsView = require('./KenBurnsView'); . . . <KenBurnsView source={'image.jpg'} style={{width:null,height: 300}}/> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – 如何在Rails模型的回调中访问p
- MTD(4)---nand flash的bbt坏块表的建立函数代码分
- 为flash添加动态链接
- c# – 如何使用Kendo UI Grid与ToDataSourceResu
- webpack脚手架构建React项目
- C系统调用open / read / write / close和O_CREAT
- 通用权限管理组件支持SqLite,感谢完善者岩子(2
- c# – 我的机器上的Stopwatch.IsHighResolution
- Swift 内存管理(2.1 高级)
- Swift3 Type 'String' does not conform