【发布时间】:2016-03-25 19:32:56
【问题描述】:
我正在尝试将 YouTube Android API 包装为 React Native 的 UI 组件。我在 Android 配置方面取得了成功(获得 onInitializationSuccess),但是我无法弄清楚如何让 YouTubePlayerView 回到我的 React Native 应用程序。
根据文档,如果您无法扩展 YouTubeBaseActivity,他们建议使用 YouTubePlayerFragment。由于 Android 上的 React Native 不使用基于 XML 的布局,因此我尝试以编程方式创建视图。但是,当我返回包装视图(我尝试作为 FrameLayout,但不确定这是否是正确的选择)时,我创建它不会在应用程序上呈现任何内容。
我现在希望让它变得非常简单,这里是一些必要的代码:
YouTubeManager.java
public class YouTubeManager extends SimpleViewManager<FrameLayout> implements YouTubePlayer.OnInitializedListener {
// ...
@Override
protected FrameLayout createViewInstance(ThemedReactContext reactContext) {
this.reactContext = reactContext;
FrameLayout view = new FrameLayout(reactContext);
view.setId(View.generateViewId());
FragmentManager fragmentManager = activity.getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
YouTubePlayerFragment fragment = new YouTubePlayerFragment();
fragmentTransaction.add(view.getId(), fragment);
fragmentTransaction.commit();
fragment.initialize("SECRET_KEY", this);
return view;
}
// ...
}
YouTube.js
class YouTube extends Component {
render () {
return <YouTubeAndroid {...this.props}/>;
}
};
var iface = {
name : 'YouTube',
propTypes : {
...View.propTypes
},
};
var YouTubeAndroid = requireNativeComponent('YouTube', iface);
module.exports = YouTube;
index.android.js
var YouTube = require('./YouTube');
class YouTubePlayer extends Component {
render() {
return (
<View style={styles.container}>
<Text>hello</Text>
<YouTube />
</View>
);
}
}
任何帮助将不胜感激,谢谢!
【问题讨论】:
-
在 youtube 组件上设置显式高度和宽度有帮助吗?
-
@agent_hunt 是的,我尝试给它一个固定的高度/宽度和背景颜色。它只是渲染一个空视图dropbox.com/s/3obfjs6agcux3z2/…
-
问题解决了吗?你成功渲染了 Fragment 了吗?
-
@ischmierer 是的,使用 Deminoth 的建议。不过,这需要扩展 ReactActivity,而且有点麻烦。这个方法最近坏了(在 0.32-rc 中修复,虽然
getCurrentActivity()可以被SimpleViewManager使用)。
标签: android react-native android-youtube-api