cocos2d-x在iOS/Android双平台上嵌入WebView
注:文章首次发布于个人博客,现将技术文章转移至此。http://blog.go3k.org/cocos2dx-add-webview/ 游戏中的帮助和游戏公告,可以通过嵌入显示WebView的方案来实现,通过编辑HTML来修改、更新公告的样式和内容都很方便。 iOS平台嵌入iOS平台上的嵌入很顺利,网上有现成的教程加代码,关键是做好OC与C++代码混编的封装。 Android平台嵌入1. 通过JNI从cocos2d-x的C++代码调用java代码。这是Android实现WebView嵌入的前提条件,务必仔细的学习一遍,否则无法向下继续。 详情参见:JNI使用教程 这是我总结的一篇JNI使用的教程,基本涵盖所有JNI使用相关的要点。 2. java代码的实现标准Android显示WebView的实现,参考代码如下: publicvoiddisplayWebView(){ this.runOnUiThread(newRunnable(){ publicvoidrun(){ //actInstance为成员变量,是当前的Activity。m_webView是WebView类型的成员变量 LinearLayoutlayout=newLinearLayout(actInstance); actInstance.addContentView(layout,newLayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); m_webView=newWebView(actInstance); layout.addView(m_webView); LinearLayout.LayoutParamslinearParams=(LinearLayout.LayoutParams)m_webView.getLayoutParams(); //可选的webview位置,x,y,width,height可任意填写,也可以做为函数参数传入。 linearParams.leftMargin=x; linearParams.topMargin=y; linearParams.width=width; linearParams.height=height; m_webView.setLayoutParams(linearParams); //可选的webview配置 m_webView.setBackgroundColor(0); m_webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); m_webView.getSettings().setAppCacheEnabled(false); } }); } 这里需要注意的问题是: JNI调用过来的代码并不是在主线程程序流中,UI显示需要放到主线程中进行。这个问题卡了我半天的时间,最后问了锋哥才明白Android上需要这么搞。 源码分享抽时间Github上建了项目,地址如下: https://github.com/go3k/CCXWebview 3. 对webView的配置在自定义的webView中跳转链接,而不是打开系统浏览器。这需要对webView设置WebViewClient,并实现shouldOverrideUrlLoading方法,如下: 改变WebView视图的大小与位置设置webView的LayoutParamaters,setLayoutParams。 参考链接:How to add an UIWebView to Cocos2d-x ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |