cocos2d-x在iOS/Android双平台上嵌入WebView

原创 2014年12月25日 17:03:41

注:文章首次发布于个人博客,现将技术文章转移至此。 http://blog.go3k.org/cocos2dx-add-webview/

游戏中的帮助和游戏公告,可以通过嵌入显示WebView的方案来实现,通过编辑HTML来修改、更新公告的样式和内容都很方便。

iOS平台嵌入

iOS平台上的嵌入很顺利,网上有现成的教程加代码,关键是做好OC与C++代码混编的封装。 
参考如下链接中的实现方式: cocos2d-x 使用UIWebView加载网页

Android平台嵌入

 1. 通过JNI从cocos2d-x的C++代码调用java代码。

这是Android实现WebView嵌入的前提条件,务必仔细的学习一遍,否则无法向下继续。 详情参见: JNI使用教程

这是我总结的一篇JNI使用的教程,基本涵盖所有JNI使用相关的要点。

 2. java代码的实现

标准Android显示WebView的实现,参考代码如下:

    public void displayWebView() {
        this.runOnUiThread(new Runnable() {
            public void run() {
//actInstance为成员变量,是当前的Activity。   m_webView是WebView类型的成员变量
                LinearLayout layout = new LinearLayout(actInstance);
                actInstance.addContentView(layout, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
                m_webView = new WebView(actInstance);
                layout.addView(m_webView);

                LinearLayout.LayoutParams linearParams = (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 ?

Cocos2d-x3.3 使用WebView以及遇到的问题

用webview来显示公告,处理富文本
  • X805433354
  • X805433354
  • 2016-12-21 11:53:05
  • 5235

Quick-Cocos2d-x 3.3 使用WebView

1、编写ini文件。进入frameworks/cocos2d-x/tools/tolua文件夹,可以根据cocos2dx_experimental_video.ini编写生产cocos2dx_expe...
  • wtuetnsrmh
  • wtuetnsrmh
  • 2015-09-15 17:02:01
  • 2661

cocos2d-x 中使用的android控件详细说明之webview

cocos2d-x 中使用的androi m_kWebView = new WebView(m_pkActInstance);     //生成一个webview (m_pkActIns...
  • zhaohuappc
  • zhaohuappc
  • 2014-05-21 09:58:56
  • 583

cocos2dx IOS 使用UIWebView来加载网页

// // WebViewIOS.h // evilcard // // Created by keltonxian on 6/18/14. // // #ifndef __WEBVIEWIO...
  • u011964791
  • u011964791
  • 2014-06-18 23:40:08
  • 2365

cocos2dx Android 使用WebView来加载网页

先上代码啦,找到android下你的主
  • u011964791
  • u011964791
  • 2014-06-19 17:30:15
  • 2201

cocos2dx 嵌入Android webview

在2dx界面中嵌套加载显示一个webview,最简单的用法就是直接在一个WebView控件中显示,外加设置了一些简单的属性,可以自定义这个webview的大小。 java代码如下: public ...
  • Mask53
  • Mask53
  • 2014-03-27 11:51:01
  • 1392

【COCOS2DX-ANDROID-游戏开发之二三】 界面中嵌入Android的WebView

(转载请注明原文地址:http://blog.csdn.net/guggy/article/details/10435157) 在Cocos2dxActivity.java中, (1) 增加...
  • teng_ontheway
  • teng_ontheway
  • 2013-12-11 19:12:11
  • 4218

cocos2dx 3.6 webview背景透明(ios android)

cocos2dx 3.6 webview背景透明(ios android)
  • magicpang
  • magicpang
  • 2015-11-24 16:09:37
  • 2734

cocos2dx C++ 嵌入一个网页

auto webview = cocos2d::experimental::ui::WebView::create();     Size *_size = new Size(visible...
  • TX98337
  • TX98337
  • 2017-09-19 15:47:16
  • 591

cocos2dx webview 打开非http:开头的网页失败

一、在cocos2dx下的src.org.cocos2dx.lib.Cocos2dxWebView.java文件新增 import android.content.Intent import.an...
  • u010679565
  • u010679565
  • 2017-06-14 18:00:02
  • 548
收藏助手
不良信息举报
您举报文章:cocos2d-x在iOS/Android双平台上嵌入WebView
举报原因:
原因补充:

(最多只允许输入30个字)