当前位置:   article > 正文

React Native十五:原生UI组件_react-native的ui是原生的

react-native的ui是原生的
在如今的App中,已经有成千上万的原生UI组件了——其中的一些是平台的一部分,另一些可能来自于一些第三方库,而且可能你自己还收藏了很多。React Native已经封装了大部分最常见的组件,譬如ScrollView和TextInput,但不可能封装全部组件。而且,说不定你曾经为自己以前的App还封装过一些组件,React Native肯定没法包含它们。幸运的是,在React Naitve应用程序中封装和植入已有的组件非常简单。
本向导会引导你如何构建一个原生UI组件,带领你了解React Native核心库中WebView组件的具体实现。
一、WebView样例
在这个例子里,我们来看看为了让JavaScript中可以使用WevView,我们以react-native init AwesomeProject创建示例项目进行演示,项目完成目录如下:

提供原生视图很简单,主要有如下几个步骤:
     1.创建一个ViewManager的子类,实现createViewInstance方法,使用@ReactProp(或@ReactPropGroup)注解;
     2.创建一个把ReactPackage的子类,把这个视图管理类注册到应用程序包的createViewManagers里;
     3.在MainActivity中的getPackages方法中添加ReactPackage的子类;
     4.实现JavaScript模块WebView.js,index.android.js;
ReactWebViewManager.java类:
  1. public class ReactWebViewManager extends SimpleViewManager<WebView>{
  2. public static final String REACT_CLASS = "MyWebView";
  3. @Override
  4. public String getName() {
  5. return REACT_CLASS;
  6. }
  7. @Override
  8. protected WebView createViewInstance(ThemedReactContext reactContext) {
  9. WebView webView= new WebView(reactContext);
  10. webView.setWebViewClient(new WebViewClient(){
  11. @Override
  12. public boolean shouldOverrideUrlLoading(WebView view, String url) {
  13. view.loadUrl(url);
  14. return true;
  15. }
  16. });
  17. return webView;
  18. }
  19. @ReactProp(name = "url")
  20. public void setUrl(WebView view,@Nullable String url) {
  21. Log.e("TAG", "setUrl");
  22. view.loadUrl(url);
  23. }
  24. @ReactProp(name = "html")
  25. public void setHtml(WebView view,@Nullable String html) {
  26. Log.e("TAG", "setHtml");
  27. view.loadData(html, "text/html; charset=utf-8", "UTF-8");
  28. }
  29. }
2.创建一个把ReactPackage的子类,把这个视图管理类注册到应用程序包的createViewManagers里;
AppReactPackage.java类
  1. public class AppReactPackage implements ReactPackage{
  2. ...... ......
  3. @Override
  4. public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
  5. return Arrays.<ViewManager>asList(
  6. new ReactWebViewManager(),new ReactRTCWebViewManager());
  7. }
  8. }
3.在MainActivity中的getPackages方法中添加ReactPackage的子类࿱
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/134271
推荐阅读
相关标签
  

闽ICP备14008679号